首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原型链-在这种情况下使用的是原型链吗?

原型链-在这种情况下使用的是原型链吗?
EN

Stack Overflow用户
提问于 2014-09-28 16:50:27
回答 1查看 68关注 0票数 1

我沿着凯尔辛普森的“YouDontKnowJS on frontendmasters.com”,对他的一个例子感到困惑。

下面是示例代码:

代码语言:javascript
复制
function Foo(who){
    this.me = who;
}

Foo.prototype.identify = function() {
    return "I am " + this.me;
};

function Bar(who) {
    Foo.call(this, who);
}


Bar.prototype = Object.create(Foo.prototype);

Bar.prototype.speak = function() {
    alert("Hello, " + this.identify() + ".");
}

var b1 = new Bar("b1");
var b2 = new Bar("b2");

b1.speak();
b2.speak();

当调用new Bar("b1")时;当调用b1.talk()时,他将向您介绍如何处理原型链

  • Bar.prototype上调用警报函数,也调用this.identify()。
  • 当调用this.identify()时,在this对象(b1)上找不到它,因此它会查找它的原型。
  • 查看Bar.prototype,它找不到识别方法,所以它再次查找它的原型链。
  • 现在它在Foo.prototype上找到了识别方法。

这是我不清楚的地方。当我们调用Bar.prototype = Object.create(Foo.prototype)时,Bar.prototype现在不应该引用一个新对象,它是Foo.prototype的副本,其中包含identify()方法吗?为什么要在原型链中再往前走一步才能找到Foo.prototype方法呢?

来自文档的Object.create()的官方定义:

Object.create()方法使用指定的原型对象和属性创建一个新对象

EN

回答 1

Stack Overflow用户

发布于 2014-09-28 16:55:25

“当我们调用Bar.prototype = Object.create(Foo.prototype)时,Bar.prototype现在不应该引用一个新对象,它是Foo.prototype的副本。”

Object.create不创建对象的副本,但它创建了对该对象的委托。因此,您必须再将一个级别提升到Foo.prototype,因为这正是Bar.prototype所委派的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26087232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档