原型模式
1、
isPrototypeOf()
方法
1 | function Person() {} |
2、
Object.getPrototypeOf()
方法–返回参数的内部特性[[prototype]]的值
1 | console.log(Object.getPrototypeOf(person1));//Person { name: 'zero' } |
3、
hasOwnProperty()
确定某个属性是在原型还是实例上
1 | console.log(person1.hasOwnProperty('name'));//false; |
4、in操作符-会在可以通过对象访问指定属性时返回true-无论该属性是在原型还是实例上
1 | let person2 = new Person(); |
如果想确定某个属性是否存在于原型属性上–结合hasOwnProperty
和in操作符
1 | function hasOwnPropertyPropery(object, name) { |
对象迭代
Object.values()
和Object.entries()
-用于将对象内容转换为序列化的-更重要的是可迭代的-格式
1 | // Object.values()-返回对象值的数组 |
1、其他原型语法-每次定义都会重写一遍Person.prototype–封装起来
1 | Person.prototype = { |
存在问题 Person.prototype
的constructor属性
不指向Person
了,如下:
1 | let friend = new Person(); |
再改进-恢复constructor属性
-使用Object.defineProperty()
定义
1 | Person.prototype = { |
2、原型的动态性
1 | function People() {}; |
重写构造函数上的原型之后再创建的实例才会引用新的原型。
3、原生对象原型
1 | console.log(Array.prototype.sort);//[Function: sort] |