我有一个简单的代码片段在JS与原型继承工作。Javascript:原型继承和原型属性
function object(o) {
function F() {}
F.prototype = o;
return new F();
}
//the following code block has a alternate version
var mammal = {
color: "brown",
getColor: function() {
return this.color;
}
}
var myCat = object(mammal);
myCat.meow = function(){return "meow";}
这工作得很好,但添加此:
mammal.prototype.kindOf = "predator";
没有。 (“mammal.prototype是不确定的”)
因为我猜测对象也许有没有原型我重写了它,取代了var哺乳动物= {...封锁:
function mammal() {
this.color = "brown";
this.getColor = function() { return this.color; }
}
这给了我很多其他的错误:
“Function.prototype.toString叫不兼容的对象”
,如果我尝试调用_myCat.getColor()
“myCat.getColor是不是一个函数”
现在我完全糊涂了。在阅读Crockford和Flanagan之后,我没有得到解决错误的方法。所以,如果有人知道这将是伟大的...
- 为什么在第一个例子中未定义的原型(这是最关心的问题,我认为)在对象明确设置原型(功能)
- 为什么让我这些奇怪的错误试图使用哺乳动物功能作为对象()函数中的原型对象?
编辑对这个问题的创造者:这两个环节上帮助了很多太:
在spheredev维基Prototypes_in_JavaScript解释原型属性适用relativily简单的方式。它缺少的是一些试用代码示例。一些很好的例子由Morris John's Article提供。我个人发现,解释并不像第一个链接那么简单,但仍然非常好。 即使在我真正了解它之后,最困难的部分实际上不是混淆.prototype propery和对象的内部[[Prototype]]。
临屋恩,这很有帮助。原型仍然让我困惑。你知道萤火虫或其他工具是否可以确定一种方法/属性是“直接属于某个对象还是通过(内部)原型来引用?它会帮助我很多简单地尝试学习。 – JanD 2010-03-14 11:38:12
@ JanD,看看我的编辑... – CMS 2010-03-14 17:37:48
当然,有人也可以修改Object.prototype.hasOwnProperty,但是如果你的代码做这样的事情,所有的投注都关闭。 – 2010-03-15 23:31:58