JavaScript继承Object.create()未按预期工作
JavaScript inheritance Object.create() not working as expected
我有:
主对象
function Fruit() {
this.type = "fruit";
}
子对象:
function Bannana() {
this.color = "yellow";
}
继承主属性
Bannana.prototype = Object.create( Fruit.prototype );
var myBanana = new Bannana();
console.log( myBanana.type );
输出:undefined
。为什么不显示"fruit"
作为结果?
为什么这没有显示出"成果"作为结果?
因为您从未在新对象上设置type
。
type
不是Fruit.prototype
的属性,而Bannana.prototype = Object.create( Fruit.prototype );
所做的只是使Fruit.prototype
的属性可用于每个Banana
实例。
CCD_ 9由CCD_。但是,如果您查看您的代码,您在执行Fruit
!this.type = "fruit";
行从不执行!type
属性不会神奇地出现。
因此,除了设置原型之外,还必须执行Fruit
。您必须通过super
调用父构造函数(就像您在其他语言(现在是ES6)中所做的那样):
function Bannana() {
Fruit.call(this); // equivalent to `super()` in other languages
this.color = "yellow";
}
在新的JavaScript版本(ES6/ES2015)中,您将使用类来代替:
class Banana extends Fruit {
constructor() {
super();
this.color = 'yellow;
}
}
这做了同样的事情,但为了便于使用,将其隐藏在class
语法后面。
这太酷了。如果你走这条路:
function Fruit() {
this.type = "fruit";
}
function Bannana() {
this.color = "yellow";
}
Bannana.prototype = new Fruit;
Bannana.prototype.type='flower';
var myBanana = new Bannana();
console.log( myBanana.type );
你会得到一朵"花",但如果你走这条路:
function Fruit() {
this.type = "fruit";
}
function Bannana() {
Fruit.call(this);
this.color = "yellow";
}
Bannana.prototype.type='flower';
var myBanana = new Bannana();
console.log( myBanana.type );
您将获得一个"水果";
我认为不需要解释,对吧?
您从未在Fruit
原型对象上放置任何内容。构造函数初始化实例,而不是原型。
如果你有:
Fruit.prototype.type = "fruit";
那么您的代码将如您所期望的那样工作。
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- 原型继承未按预期工作
- 为什么使用CoffeeScript类继承时主干模型不能正常工作
- 为什么 JavaScript 继承是这样工作的
- 如何使 javascript 文件在从母版页继承的任何页面上工作
- 有人能解释一下javascript中的继承是如何工作的吗
- 继承函数在Node.js中是如何工作的
- 通过clone()实现对象继承是如何工作的
- 继承和依赖项注入如何与角度模块一起工作
- 为什么这个继承的例子不能在我的计算机上工作?
- 控制器继承在angularjs中是如何工作的
- AppendChild不工作!,从DOM元素对象继承.我做错了什么?
- javascript对象继承是如何工作的
- JavaScript继承Object.create()未按预期工作
- JavaScript 继承无法按预期工作
- 多重继承和连接继承在Javascript中是如何工作的
- KineticJS的继承模型是如何工作的?
- React ES6组件继承:工作,但不推荐