Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript函数对象';s继承方法行为_Javascript_Oop_Function_Inheritance_Object - Fatal编程技术网

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那么你的问题是什么?你最初的问题是为什么没有记录下来。它没有文档化,因为它不是对象的核心方法。如果你还有其他问题,也许你应该接受其中一个答案,并提出一个新问题。