javascript函数对象的继承方法行为

时间:2010-12-29 21:18:55

标签: javascript oop function inheritance object

我遇到过函数对象的行为。这似乎与原型相似,但使用了不同的方法。

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,但我似乎无法在任何地方找到它。任何人都可以为此行为和任何进一步的文档命名。

2 个答案:

答案 0 :(得分:1)

我认为inheritFrom这个词在这里没有任何意义。它也可以bar。使这项工作成为你定义“subClass”函数成员的模式,你在下一行调用它。

道格拉斯·克罗克福德(Douglas Crockford)可能需要查阅“Classical Inheritance in JavaScript”文章,了解其他一些想法。

答案 1 :(得分:0)

inheritFrom不是JavaScript核心对象中存在的方法。 JavaScript继承可以通过多种方式完成as outlined in this post。你在这里做的不是真正适当的继承,因为你只是在一个单独的对象中设置一个等于函数的方法。

首先声明一个名为superClass的函数。此函数设置foo对象的barthis属性。当您在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()方法的指针。