我遇到过函数对象的行为。这似乎与原型相似,但使用了不同的方法。
var Car = function() {
this.foo = 'shiny';
}
var Rover = function() {
this.inherit = Car;
this.inherit();
}
var Mini = function() {
this.inherit = Car;
this.inherit();
}
当创建一个子类的新实例时,this.inherit方法具有调用父类本身的效果,因此父类的属性和方法可供子类使用。
var myRover = new Rover();
var myMini = new Mini();
myMini.foo = 'rusty';
console.log(myRover.foo, myMini.foo); // displays "shiny" & "rusty" respectively
我查看过Mozilla和MSDN,但我似乎无法在任何地方找到它。任何人都可以为此行为和任何进一步的文档命名。
答案 0 :(得分:1)
我认为inheritFrom
这个词在这里没有任何意义。它也可以bar
。使这项工作成为你定义“subClass”函数成员的模式,你在下一行调用它。
道格拉斯·克罗克福德(Douglas Crockford)可能需要查阅“Classical Inheritance in JavaScript”文章,了解其他一些想法。
答案 1 :(得分:0)
inheritFrom
不是JavaScript核心对象中存在的方法。 JavaScript继承可以通过多种方式完成as outlined in this post。你在这里做的不是真正适当的继承,因为你只是在一个单独的对象中设置一个等于函数的方法。
首先声明一个名为superClass
的函数。此函数设置foo
对象的bar
和this
属性。当您在subClass
上设置等于superClass
this
对象的方法时,会引用subClass
函数,因为它是方法的调用者,因此subClass的属性为{{1 }和foo
设置为bar
和'foo'
。
但是,当你在这里覆盖foo方法时:
'bar'
你将foo变成了一个函数。
请注意,添加此脚本时:
this.foo = function() {
return this.foo;
};
var test = new subClass();
alert(test.foo);
将成为您在test.foo
构造函数中覆盖其值的函数。添加这个:
subClass
将警告字符串alert(test.bar);
,因为您没有覆盖它。此外,如果您致电'bar'
,它只会返回指向test.foo()
方法的指针。