JavaScript继承:When where'是我的派生成员
JavaScript inheritance: When where's my derived members?
查看以下代码:
function Primate() {
this.prototype = Object;
this.prototype.hairy = true;
}
function Human() {
this.prototype = Primate;
}
new Human();
检查new Human()
时,没有hairy
成员。我希望会有一个。有没有其他方法可以让我继承Primate
?涉及Object.create()
的内容(ECMAScript5在我的场景中可以使用)?
编写代码时,使用new Human()
创建的对象将具有一个名为prototype
的属性,该属性的值是对Primate
函数的引用。这显然不是你想要的(也不是特别的)。
几件事:
-
您通常希望修改函数的
prototype
,该函数将用作构造函数(使用new
运算符)。换句话说,您希望在Human
上设置prototype
(而不是在Human
的实例上)。 -
分配给
prototype
的值应该是所需类型的实例(或者,如果不需要初始化工作,则是所需的类型的prototype
),而不是对其构造函数的引用。 -
从来没有必要显式地将
Object
(或Object
实例)分配给函数的prototype
。这是隐含的。
你可能想要更像这样的东西:
function Primate() {
this.hairy = true;
}
function Human() {}
Human.prototype = new Primate();
Human.prototype.constructor = Human;
var h = new Human();
h
引用的Human
具有一个名为hairy
的属性,其值为true。
在前面的示例中,hairy
仅在调用Primate
时被分配其值,这就是为什么必须为Human.prototype
分配Primate
的实例的原因。相反,可以将其编写为不需要这样的初始化。
示例:
function Primate() {}
Primate.prototype.hairy = true;
function Human() {}
Human.prototype = Primate.prototype;
Human.prototype.constructor = Human;
var h = new Human();
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 可以't让我的if语句处理js中的html表单输入
- 我的单元测试选项是什么
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 我的职位回报太快了,如何做出承诺
- 我的jQuery插件参数没有正确启动,遇到了问题
- 如何识别我的网站中的慢速设备
- 如何将JSON数据导入我的ejs模板
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 知道为什么我的旋转木马不会自动更改图片吗
- 我的模板未被解析
- 无法将数据从firebase获取到我的html页面
- 角度图表;t显示在我的页面中
- 我的AngularJS表达式没有'不起作用
- 将电视直播频道从网站嵌入我的网站
- /undefined在我的404错误日志中多次出现
- 为什么我的d3.jsselectAll+过滤器没有过滤
- 元素在我的代码中不会.fadeTo.Don'I don’我不知道;s错误的JavaScript、JQuery、H
- 当我从有界数据派生输出时,为什么我的自定义指令不更新
- JavaScript继承:When where'是我的派生成员