在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
es5中创建构造函数和实例
原来在es5中的写法 定义好Point后,在原型对象上定义getPostion的方法 实例自身是没有这个方法的,我们调用的时候会去创建他的构造函数上原型上往上寻找。原型也就是__proto__ 输出的结果 调用getPosition方法
es6中有了类的概念用class去定义一个类。 constructor是构造函数,this指向创建的实例。每个类的定义必须有constructor方法,若果你在定义类的时候没有写构造函数,它也会默认加上一个空的 getPosition方法是创建在Point的原型对象上的 多个方法之间可以用分号隔开,切记不要用逗号
也可以自己去返回一个对象 自己定义了return的返回,那么创建的实例就不再是你的实例了。这里我们使用instanceof来检测一下。返回的是false。我们创建的结果并不是你的类的实例的对象 es6中的类必须使用new 关键字去创建 生成的实例上添加属性或者方法 判断是否是实例上自身有的属性用hasOwnProperty,返回的结果是true说明自身就有这个属性 方法不是自有属性 getPostion实际上是p1继承来的。在原型__proto__上判断有没有这个属性getPosition返回true
取值函数get,存值函数setes6中加入了set和get关键字,来看下他们是怎么使用的 设置为19 看完这个例子大概就知道set和get大概是干嘛的。把一个属性age拆开成两个存取值函数。 当我们去读取属性值的时候,就会调用get修饰的方法。 当我们给这个属性赋值的时候就会调用set修饰的方法,set修饰的方法有个参数newValue 就是新赋的值
在es6中类也可以使用set和set修饰 访问属性值 class表达式函数有两种定义形式 class也有两种形式的定义: 第一种 第二种方式 最后实际的类型是Infos
静态方法直接定义在类里面的方法都会被实例继承,如果不希望实例继承某个方法,只想这个方法被类本身调用的时候,就需要将方法标记为静态方法 使用static关键字来标识一个静态方法 每个类里面都有一个name属性 es5里面定义一个函数,打印出函数的name
只能Point自己调用。这就是静态方法的定义 实例属性的其他写法这里定义的类,要添加到类上的属性都是通过this来添加 另外一种写法在 constructor的外面,并且给了z的初始值为0。这里因为没有安装es的loader所以只能在浏览器里面执行 静态属性es6中只有静态方法,并没有静态属性 通过这种形式可以实现静态属性
私有方法目前es6并不提供私有方法、私有属性,需要使用一些技巧来实现 把方法定义在外面 通过实例是没有办法拿到func2的
第三种方式,用到es6中新增的基本数据类型symbol,唯一性,独一无二的 这里的p是没有办法拿到func1方法的 创建a.js
如果想调用必须拿到symbol值才可以调用,这就是通过symbol值定义私有方法 私有属性就是属性前面加#号,处于提案阶段,暂时还没法使用 new.targetes6中新增的,一般用于构造函数中,返回new命令作用于的构造函数 new.target就表示构造函数 普通的调用方式 同样在类中也可以使用new.target 定义父类,子类继承父类 虽然是在父类中使用的new.target.这里的原因下节课学习了继承就清楚了 利用这个特点,我们就可以实现,定义一个类,这个类不能直接用来创建实例,只能通过继承它的子类来实例化 父类就会有异常
|
请发表评论