创建原型继承时代理实例更改类?

拉法雅提格

因此,我尝试使用替代方法设置原型继承,而我遇到了一种对我来说似乎很奇怪的行为。这是我的课程:

function Animal(name) { 
    this.name = name;
}

Animal.prototype.eat = function() { 
    console.log("mmm... food...")
};

function Dog(name) { 
    this.name = name 
};

var Surrogate = function() {}
Surrogate.prototype = Animal.prototype;

现在,我想将Animal设置为基类。如果我创建代理实例:

在此处输入图片说明

浏览器控制台说s是Surrogate的一个实例。

但是,当我将Dog类的原型设置为Surrogate实例时:

在此处输入图片说明

它成为动物的实例吗?为什么会这样呢?这是正确的还是我的解释是错误的?

贝吉

使用替代方法

提示:Object.create为此使用已经十年了:-)

它成为动物的实例吗?

否。它仍然是完全相同的对象,并且功能未更改。这是一个instanceof Animal就像它以前去过。

Animal {}您在控制台中看到的是一个自定义显示选择的调试器。

为什么会这样呢?

我的猜测是,您看到一个内部优化的.prototype副作用,当将一个对象分配为function的对象时,会发生这种情况,这只能在调试器中观察到。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章