补充
- 函数的显示原型指向的对象默认是空Object实例对象(但Object不满足)
var fn = new Fn()
console.log(Fn.prototype instanceof Object) // false
console.log(Object.prototype instanceof Object) // false
console.log(Function.prototype instanceof Object) // true
复制代码
- 所有函数都是Function的实例(包括Function)
console.log(Function.__proto__ === Function.prototype) // true
复制代码
- Object的原型对象是原型链的尽头
console.log(Object.prototype.__proto__) // null
复制代码
原型链的属性问题
- 读取对象的属性值时:会自动到原型链中查找
function Fn() {
}
Fn.prototype.a = 'xxx'
var fn1 = new Fn()
console.log(fn1.a) // xxx
复制代码
- 设置对象的属性值时:不会查找原型链,如果当前对象中没有此属性,直接添加此属性并设置其值
function Fn() {
}
Fn.prototype.a = 'xxx'
var fn1 = new Fn()
var fn2 = new Fn()
fn2.a = 'yyy' // 直接添加此属性a,并设置其值 yyy
console.log(fn1.a) // xxx
console.log(fn2.a) // yyy
复制代码
- 方法一般定义在原型中,属性一般通过构造函数定义在对象本身上
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.setName = function (name) {
this.name = name
}
var p1 = new Person('Tom', 18)
p1.setName('Bob')
console.log(p1.name, p1.age) // Bob 18
var p2 = new Person('Jack', 18)
p2.setName('Andy')
console.log(p2.name, p2.age) // Andy 18
console.log(p1.__proto__ === p2.__proto__) // true 隐式原型一致
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END