资讯专栏INFORMATION COLUMN

关于原型链中constructor、prototype及__proto__的问题

alanoddsoff / 3230人阅读

摘要:最近看到一个关于原型链的问题,回顾一下原型链的知识点。说说为什么为什么是。首先不是自身的属性,而是原型链上的,即的原型中。类似通过这样来找到的值。,不是复制了对象,而是把指向了,所以对的修改会影响到的值。再看看这张图一切都明朗了。

最近看到一个关于原型链的问题,回顾一下原型链的知识点。

function person(name)
{
    this.name = name;
    this.showME = function()
    {
    alert(this.name);
    }
};

person.prototype.form = function()
{
    alert("i come form prototype")
}
var father = new Person("JS");
alert(father.constructor);
function Subper()
{
...
}
SubPer.prototype = father;
Sub.protptype.constructor = subper;
var son = new Subper();
son.showMe();  //JS
son.from();   //i come form prototype
alert(father.constructor);  //function Subper(){}
alert(son.constructor);  //function SubPer() {}
alert(SubPer.prototype.constructor);   //function SubPer() {}




说说为什么father.constructor 为什么是function Subper(){}。
首先father.constructor 不是 father 自身的属性,而是原型链上的,即father的prototype原型中。类似通过 father.__proto__.constructor 这样来找到 constructor 的值。就这个问题而言,father.__proto__ 指向的是 Person.prototype。Subper.prototype = father ,不是复制了 father 对象,而是把 Subper.prototype 指向了 father,所以对Subper.prototype 的修改会影响到 father 的值。

此时Subper.prototype.constructor属性实际就是father.__proto__.constructor。因此当Subper.prototype.constructor = Subper 时,son.constructor = father.__proto__.constructor =person.prototype.constrctor = Subper。

再看看这张图一切都明朗了。

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

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

相关文章

  • 原型链是什么?关于原型链中constructorprototype__proto__之间关系

    摘要:的隐式原型是母,母是由构造函数构造的,但函数的隐式原型又是。。。。可能是考虑到它也是由构造函数生成的吧,所以返回的值也是。 showImg(https://segmentfault.com/img/bVyLk0); 首先,我们暂且把object类型和function类型分开来,因为 function是一个特殊的对象类型,我们这里这是便于区分,把function类型单独拿出来。顺便一提,...

    kaka 评论0 收藏0
  • 关于原型原型链、和继承

    摘要:根据定义,没有原型,并作为这个原型链中的最后一个环节。偷偷贴在这里再知道了原型原型链,那一个对象的过程知道吗,能手写一个吗。 似乎生活中常常会遇到这种情况,你去一家公司面试,前面面的都挺好,你觉得你对基础算法的了解很好,各种排序,红黑树,二叉树,深度/广度优先算法都答出来了,leetcode上的若干困难题目也都答上来了,然后面试官说,那么好吧,介绍一下你对原型的看法吧。 ???我头发。...

    沈俭 评论0 收藏0
  • JavaScript继承背后场景-prototype,__proto__, [[prototype

    摘要:实例可以通过代理来找到它,并用来检测其构造函数。经典继承图这也是通过构造函数来创建对象,但是在这一系列的对象和实例之间我们的焦点是放在原型链上。尽管,但构造函数的属性并不是对象自己的属性,它实际上是通过寻找原型链获得的,即所指向的地方。 继承是面向对象编程语言的一大核心功能点,虽然JavaScript并不是一门真正意义上的面向对象的编程语言,但也通过某种手段实现了继承这一功能,最常见的...

    邹立鹏 评论0 收藏0
  • 理解javaScript原型原型

    摘要:构造函数的属性指向原型对象原型对象的属性指向构造函数实例对象的指向原型对象所有引用类型默认都继承了,而这个继承也是通过原型链实现的。第一种方式是使用操作符,只要用这个操作符来测试实例与原型链中出现过的构造函数,结果就会返回。 理解对象 首先对象的定义是:无序属性的集合,其属性可以包含基本值、对象或者函数。严格来讲,这就相当于说对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名...

    NSFish 评论0 收藏0
  • 原型原型

    摘要:原型属性在函数被定义时创建,初始值是一个空对象没有自身属性的对象。为新建对象添加方法和属性的方式利用原型构造器中原型属性几个相关方法和属性判断一个属性是自身属性还是原型属性。来自知乎的一张图,很清晰面向对象编程指南的原型链图 sync github 原型属性 prototype 在函数被定义时创建,初始值是一个空对象(没有自身属性的对象)。 为新建对象添加方法和属性的方式 利用原型 /...

    dayday_up 评论0 收藏0

发表评论

0条评论

alanoddsoff

|高级讲师

TA的文章

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