资讯专栏INFORMATION COLUMN

javascript原型链

li21 / 2952人阅读

摘要:实例解析引申所以在构造函数原型对象没有改写的情况下,我们可以通过属性判断某个实例的构造函数是谁。例例总结实例的属性指向其构造函数的属性里的原型对象

__proto__属性

__proto__:每个对象都有一个__proto__属性,相当于一个指针,可以指向某原型对象,并且引用其属性及方法。(有些浏览器没有)

var a = { 
x: 10, 
calculate: function (z) { 
return this.x + this.y + z 
} 
}; 
var b = { 
y: 20, 
__proto__: a 
}; 

var c = { 
y: 30, 
__proto__: a 
}; 
b.calculate(30); // 60

__proto__的默认指向

它指向的是最高级的Object.prototype,而Object.prototype的__proto__为空

var d = {};
d.__proto__//Object {}
d.__proto__ === Object.prototype//true
Object.prototype.__proto__//null
prototype属性 原理说明

创建构造函数foo时,同时创建了一个原型对象foo {}并将其存储于foo.prototype中(FunctionName.prototype相当于一个原型对象),a是foo的一个实例可以通过a.__proto__访问到构造函数foo的原型对象。同时,此原型对象又有名为constructor的属性,它反过来引用函数本身。

function foo(){}
var a = new foo()
a.__proto__//foo {}
a.__proto__ === foo.prototype//true
foo.prototype.constructor//function foo(){}
实例解析
function Foo(y){ 
this.y = y ; 
} 
Foo.prototype.x = 10; 
Foo.prototype.calculate = function(z){ 
return this.x+this.y+z; 
}; 
var b = new Foo(20); 
console.log(b.calculate(30));//60

引申

所以,在构造函数原型对象没有改写的情况下,我们可以通过constructor属性判断某个实例的构造函数是谁。

例1.function foo(){};
    var a = new foo();
    a.constructor//function foo(){}
例2.var b = {};
    b.constructor//function Object() { [native code] }
    Object.prototype//Object {}
    Object.prototype.constructor//function Object() { [native code] }
总结

实例的__proto__属性指向其构造函数的prototype属性里的原型对象

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85798.html

相关文章

  • 如何理解JavaScript原型原型

    摘要:之前有朋友问怎么去理解原型和原型链的问题。理解原型链的小技巧将箭头视作泛化子类到父类关系那么图中所有的虚线将构成一个继承层级,而实线表示属性引用。原型链是实现继承的重要方式,原型链的形成是真正是靠而非。 之前有朋友问怎么去理解原型和原型链的问题。这个问题,在面试中,很多同学经常都会遇到。这里给大家讲讲,方便大家记忆。 JavaScript的特点JavaScript是一门直译式脚本...

    xuexiangjys 评论0 收藏0
  • 如何理解JavaScript原型原型

    摘要:之前有朋友问怎么去理解原型和原型链的问题。理解原型链的小技巧将箭头视作泛化子类到父类关系那么图中所有的虚线将构成一个继承层级,而实线表示属性引用。原型链是实现继承的重要方式,原型链的形成是真正是靠而非。 之前有朋友问怎么去理解原型和原型链的问题。这个问题,在面试中,很多同学经常都会遇到。这里给大家讲讲,方便大家记忆。 JavaScript的特点JavaScript是一门直译式脚本...

    adie 评论0 收藏0
  • 我所认识的JavaScript作用域原型

    摘要:为了防止之后自己又开始模糊,所以自己来总结一下中关于作用域链和原型链的知识,并将二者相比较看待进一步加深理解。因此我们发现当多个作用域相互嵌套的时候,就形成了作用域链。原型链原型说完了作用域链,我们来讲讲原型链。   毕业也整整一年了,看着很多学弟都毕业了,忽然心中颇有感慨,时间一去不复还呀。记得从去年这个时候接触到JavaScript,从一开始就很喜欢这门语言,当时迷迷糊糊看完了《J...

    Bmob 评论0 收藏0
  • 细说 Javascript 对象篇(二) : 原型对象

    摘要:并没有类继承模型,而是使用原型对象进行原型式继承。我们举例说明原型链查找机制当访问一个对象的属性时,会从对象本身开始往上遍历整个原型链,直到找到对应属性为止。原始类型有以下五种型。此外,试图查找一个不存在属性时将会遍历整个原型链。 Javascript 并没有类继承模型,而是使用原型对象 prototype 进行原型式继承。 尽管人们经常将此看做是 Javascript 的一个缺点,然...

    lansheng228 评论0 收藏0
  • javascript高级程序设计》笔记:原型图解

    摘要:不理解没关系,下面会结合图例分析上一篇高级程序设计笔记创建对象下一篇高级程序设计笔记继承参考之原型链的解读三张图搞懂的原型对象与原型链继承与原型链 文章直接从原型图解开始的,如果对一些概念不太清除,可以结合后面几节查看 1. 图解原型链 1.1 铁三角关系(重点) function Person() {}; var p = new Person(); showImg(https://s...

    vspiders 评论0 收藏0
  • JavaScript原型以及Object,Function之间的关系

    摘要:由于一般所有的原型链最终都会指向顶端的,所以它们都是的。好了现在了,成了所有对象原型链的。 JavaScript里任何东西都是对象,任何一个对象内部都有另一个对象叫__proto__,即原型,它可以包含任何东西让对象继承。当然__proto__本身也是一个对象,它自己也有自己的__proto__,这样一级一级向上,就构成了一个__proto__链,即原型链。当然原型链不会无限向上,它有...

    zacklee 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<