javascript - 创建原型继承时代理实例更改类?
问题描述
所以我正在尝试使用代理方法设置原型继承,但我遇到了一种对我来说似乎很奇怪的行为。这是我的课程:
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 的一个实例?为什么会这样?这是正确的还是我解释错了?
解决方案
使用代理方法
Protip:Object.create
用于这个已经标准十年了:-)
它变成了 Animal 的一个实例?
不,它仍然是完全相同的对象,没有任何功能改变。这instanceof Animal
就像以前一样。
您在控制台中看到的Animal {}
是调试器的自定义显示选项。
为什么会这样?
我的猜测是,您会看到内部优化的副作用,该副作用是在将对象分配为.prototype
function时发生的,这仅在调试器中可见。
推荐阅读
- pandas - 通过比较行创建新列
- r - 如何在 R 中的滚动窗口上迭代 PCA?
- karate - 如何从空手道运行junit测试?
- python - Hackerrank 频率查询
- javascript - 将值重新加载到数组中发生在 javascript 中的最后一个位置之前的一个位置
- laravel - SQLSTATE [23000]:完整性约束违规:1452 在添加 Auth::user()->campus_id 属性 Laravel 5.5
- python - 将参数作为用户输入的函数
- javascript - 带有 angularJS 的 Steam API?
- python - python获取各种字符串
- javascript - 将持久过滤器应用于 tablesorter 表