page contents

原型修改、重写?

轩辕小不懂 发布于 2021-12-21 13:44
阅读 528
收藏 0
分类:WEB前端开发
  • js
  • 2700
    Nen
    Nen
    - 程序员

    function Person(name) {

     this.name = name

    }

    // 修改原型

    Person.prototype.getName = function() {}

    var p = new Person('hello')

    console.log(p.__proto__ === Person.prototype) // true

    console.log(p.__proto__ === p.constructor.prototype) // true

    // 重写原型

    Person.prototype = {

     getName: function() {}

    }

    var p = new Person('hello')

    console.log(p.__proto__ === Person.prototype) // true

    console.log(p.__proto__ === p.constructor.prototype) // false

    可以看到修改原型的时候p的构造函数不是指向Person了,因为直接给Person的原型对象直接用对象赋值时,它的构造函数指向的了根构造函数

    Object,所以这时候p.constructor = = = Object ,而不是p.constructor = = = Person。要想成立,就要用constructor指回来:

    Person.prototype = {

     getName: function() {}

    }

    var p = new Person('hello')

    p.constructor = Person

    console.log(p.__proto__ === Person.prototype) // true

    console.log(p.__proto__ === p.constructor.prototype) // true


    请先 登录 后评论