javascript函数对象';s继承方法行为
我遇到了函数对象的一个行为。这似乎与原型设计相似,但使用了不同的方法javascript函数对象';s继承方法行为,javascript,oop,function,inheritance,object,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(); } 当创建子类的新实例时,此.inherit方法
var Car = function() {
this.foo = 'shiny';
}
var Rover = function() {
this.inherit = Car;
this.inherit();
}
var Mini = function() {
this.inherit = Car;
this.inherit();
}
当创建子类的新实例时,此.inherit方法具有在自身上调用父类的效果,以便子类可以使用父类的属性和方法
var myRover = new Rover();
var myMini = new Mini();
myMini.foo = 'rusty';
console.log(myRover.foo, myMini.foo); // displays "shiny" & "rusty" respectively
我查看了Mozilla和MSDN,但似乎在任何地方都找不到它。任何人都可以为这种行为和任何进一步的文档命名。
inheritFrom
不是JavaScript核心对象中存在的方法。JavaScript继承可以通过多种方式实现。这里所做的并不是真正正确的继承,因为您只是在一个单独的对象中设置一个方法,该对象等于一个函数
首先声明一个名为超类
的函数。此函数用于设置This
对象的foo
和bar
属性。当您将子类
上的方法设置为等于超类
时,此
对象会引用子类
函数,因为它是方法的调用方,因此子类的属性为foo
和bar
设置为'foo'
和'bar'
但是,当您在此处覆盖foo方法时:
this.foo = function() {
return this.foo;
};
你把foo变成一个函数
请注意,添加此脚本时:
var test = new subClass();
alert(test.foo);
test.foo
将是一个函数,因为您在子类
构造函数中重写了它的值。添加以下内容:
alert(test.bar);
将提醒字符串
'bar'
,因为您没有覆盖它。另外,如果调用test.foo()
它只会返回一个指向test.foo
方法的指针。我认为inheritFrom
这个词在这里没有任何意义。它也可以是条
。使这项工作起作用的是您在下一行调用的“subClass”函数中定义一个成员的模式
道格拉斯·克罗克福德(Douglas Crockford)的“”文章可能值得一看,以了解更多的想法。我对方法名称进行了编辑,使其更有意义。子类方法返回继承的属性。这篇文章看起来很有趣,因为它使用了使用“apply”的第三种类型的继承method@gawpertron:基本上,我想告诉你的是,你并不是真的在这里继承遗产。您只是说在
子类
对象上会有一个名为myFunction
(或其他)的方法。此myFunction
在您的超类
函数中运行脚本。超类
函数中的this
关键字引用其调用者,在本例中,调用者将是子类
方法。我已删除该函数。我现在明白了,方法“inheritFrom”、“inherit”或“monkeys”的名称与使用“new”关键字的效果相同,只是将属性和方法附加到子类中。@gawpertron那么你的问题是什么?你最初的问题是为什么没有记录下来。它没有文档化,因为它不是对象的核心方法。如果你还有其他问题,也许你应该接受其中一个答案,并提出一个新问题。