原型继承的新手-Can'找不到Undefined变量的问题
New to Prototypal Inheritance - Can't find the issue with Undefined variable
我对JavaScript中的原型继承很陌生,我正在努力了解这里的问题所在。
简单的代码,我们有两个对象pet和pet2,pet2继承自pet。
var Pet = function() {
this.type="Dog";
this.age = 4;
};
var Pet2 = function() {
this.breed = "Kashon";
};
pet = new Pet();
pet2 = new Pet2();
if (Object.create !== 'function') {
Object.create = function(oldObject) {
function F() {}
F.prototype = oldObject;
return new F();
};
}
pet2 = Object.create(pet);
问题是,当我试图访问pet2.bread时,由于某种原因,它是未定义的,为什么会这样?
alert(pet2.type); //ok
alert(pet2.age); //ok
alert(pet2.breed); //comes out undefined?
任何帮助都很好:D
当您使用Object.create时,您将旧对象指定为原型(例如,Pet)。当然,Pet2的任何属性都不会存在。您应该使用原型来"继承"对象,例如:Pet2.prototype = new Pet;
var Pet = function() {
this.type="Dog";
this.age = 4;
};
var Pet2 = function() {
this.breed = "Kashon";
};
Pet2.prototype = new Pet; // Pet2 inherits Pet
pet = new Pet();
pet2 = new Pet2();
alert(pet2.type); //ok
alert(pet2.age); //ok
alert(pet2.breed); // ok?
http://jsfiddle.net/U66aX/
这里有很多问题。
- 你把伪古典与原型继承混合在一起。这并不是说不能做到,但我只会坚持其中一个。既然你在问原型,你应该远离
new
(除了在Object.create
函数内部) - 您设置了两次pet2,因此覆盖了使其成为
Pet2
实例的初始赋值 - 你从来没有说
Pet2
继承自Pet1
以下是原型示例的样子:http://jsfiddle.net/NsRMA/
var Pet1 = {
type: "Dog",
age: 4
};
// Make Pet2 inherit from Pet1
var Pet2 = Object.create(Pet1);
// Add new properties to Pet2, this can and should be done
// by passing another argument to Object.create , but any
// hacked version can't support it
Pet2.breed = "Kashon";
// Now create an object that inherits from Pet2 (and consequently, Pet1)
var pet = Object.create(Pet2);
alert(pet.type); //ok
alert(pet.age); //ok
alert(pet.breed); //ok
相关文章:
- 气质的“nestRemoting()”有时可以'找不到关系
- 错误405:向Java控制器(Ajax)发送JSON时找不到POST方法
- 找不到模块捆绑包
- for循环中的javascript if语句找不到==
- 为什么JavaScript可以'找不到给定的InnerHTML并返回Cannot set property
- 失败:等待Protractor与页面同步时出错:“”;在窗口上找不到角度”;
- Babel编译错误:找不到模块核心js/library/fn/get迭代器
- [Vue warn]:找不到元素
- ngRoute找不到模板
- 未能加载,因为找不到支持的源.当播放HTML5音频元素时
- 因果报应-找不到模块:错误:无法解析模块'scs'
- Angular 2:在本地.json文件上找不到文件
- module.js在运行iron节点时找不到模块
- 放大弹出生成“;找不到文件”;YouTube视频的错误
- 我发现了一些只在移动设备上可见的垃圾邮件链接,我可以'找不到包含此垃圾邮件链接的脚本的位置
- Web 地址虚拟目录会断开外部 JavaScript 链接,因此找不到文件
- Meteor.js可以'找不到语义:ui包
- Angular 中的$routeProvider在 undefined 中找不到
- 原型继承的新手-Can'找不到Undefined变量的问题
- ColorBox iframe-在服务器上找不到请求的url/undefined