首页 > 解决方案 > 创建原型继承时代理实例更改类?

问题描述

所以我正在尝试使用代理方法设置原型继承,但我遇到了一种对我来说似乎很奇怪的行为。这是我的课程:

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 的实例时:

在此处输入图像描述

它变成了 Animal 的一个实例?为什么会这样?这是正确的还是我解释错了?

标签: javascriptprototypal-inheritance

解决方案


使用代理方法

Protip:Object.create用于这个已经标准十年了:-)

它变成了 Animal 的一个实例?

不,它仍然是完全相同的对象,没有任何功能改变。这instanceof Animal就像以前一样。

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

为什么会这样?

我的猜测是,您会看到内部优化的副作用,该副作用是在将对象分配为.prototypefunction时发生的,这仅在调试器中可见。


推荐阅读