美文网首页
理解JavaScript 中的原型模式

理解JavaScript 中的原型模式

作者: moofyu | 来源:发表于2020-04-25 23:25 被阅读0次

    原型对象的创建

    • 我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向函数的原型对象。

    原型对象

    • 所有的原型对象都会自动获得一个constructor(构造函数)属性,这个属性指向prototype属性所在函数的。

    • 原型对象还有很多从Object继承来的属性和方法。

    • 当调用构造函数创建一个新实例后,该实例的内部将包含一个指针(内部属性),指向构造函数的原型对象--[[prototype]]。

    [[prototype]]

    这个是一个指针,这指针指向原型对象。 脚本没有标准的方式访问这个[[prototype]],但FireFox Safari Chrome 都支持一个属性称为proto (称为“隐式原型”)

    连接存在于实例和原型对象之间,而不是实例与构造函数。

    Person–> Person.prototype <–person1

    • 上图展示了Person构造函数、Person的原型属性以及现有的两个实例之间的关系。

    • 构造函数的prototype属性指向原型对象,原型对象的constructor属性又指回了构造函数!

    • 原型对象除了包含constructor属性之外,还包括后来添加的其他属性。Person的每个实例都包含一个内部属性——“proto”,这个属性仅仅指向了

    • Person.prototype,即:Person.proto === Person.prototype;换句话说,它们与构造函数没有直接关系。

    isPrototypeOf

    判断某个实例和某个原型的对应关系。

    Person.prototype.isPrototypeOf(person1);//true
    

    它就是判断实例的[[prototype]]是否指向调用这个方法的对象。

    Object.getPrototypeOf

    ES5新方法,用来获取一个实例的原型。

    Object.getPrototypeOf(person1)==Person.prototype;   // true
    
    Object.getPrototypeOf(person1).name; // "Nicholas"
    

    返回的原型,可以访问这个原型中的属性方法值。
    我们在使用原型继承的时候会用到这个方法。

    原型链

    原理:每当代码读取某个对象的某个属性时,都会执行一次搜索,目标是具有给定名字的属性。搜索首先从对象实例本身开始,如果在实例中找到了具有给定名字的属性,则返回该属性的值;如果没有找到,则继续搜索指针指向的原型对象,在原型对象中搜索给定名字的属性。如果搜索到了属性就停止。仍然搜索不到,就搜索这个原型对象的上一级的原型对象,直到Object.prototype,这个是所有对象的根原型对象,它的上一级是null。

    文章参考

    相关文章

      网友评论

          本文标题:理解JavaScript 中的原型模式

          本文链接:https://www.haomeiwen.com/subject/kpfrwhtx.html