每天 10 分钟,学习 JavaScript —— (十一)原型链属性

补充

  • 函数的显示原型指向的对象默认是空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
喜欢就支持一下吧
点赞0 分享