理解Javascript原型继承
Understanding of Javascript prototypal inheritance
我正试图了解Javascript继承,并想检查我的理解是否正确。当我在JS中这样声明Javascript函数时:
function Animal() {
}
现在第一个问题:
我声明
Function
对象。这与JS附带的Array
没有什么不同。Array
也是JS原生提供的Function
对象,对吗?那么Object
和RegExp
以及其他的呢?是这样吗?说这个对象继承自
Function
是不正确的,但有人能解释一下为什么吗?这是因为没有像Java和其他语言那样使用正式类吗?还是因为Animal
采用了实际存在对象的属性,而不是其他语言中的类的蓝图?还有其他原因吗?
对以上内容的澄清将不胜感激,干杯,
编辑:我的问题似乎引起了混乱,所以我应该澄清一下。在第1点中,我并不是在问Array返回了什么。我只是想确认我的理解,函数Animal
和Array
都有一个共同点,即它们的[[Prototype]]属性引用了相同的Function.prototype
,因此它们都是Function
对象。如果我理解正确的话,Animal
和Array
是不同的,但Animal.prototype
和Array.prototype
是明显不同的。
在第2点中,我想解释为什么说Animal从Function"继承"是不正确的。
我希望这更有意义,谢谢大家
- 是的,您不能扩展Array,所以Array与您自己的函数有点不同
- 您可以说对象是从原型链上的原型中固有的,但不应该像在基于类的语言中那样将其与继承混淆。关于原型和构造函数的更多信息,可以在这里找到
注2:使用Animal构造函数创建的实例在原型链上没有Function,但Animal构造器本身在原型链中有Function:
function Animal() {}
var a = new Animal();
console.log(a instanceof Function);//false
console.log(a instanceof Object);//true
console.log(Animal instanceof Function);//true
console.log(Animal instanceof Object);//true
var noProt = Object.create(null);
console.log(noProt instanceof Object);//false
console.log(noProt.hasOwnProperty);//undefined
除了使用传递null作为第一个参数的object.create外,所有对象实例(包括Function)的原型链中都有object。对我来说,这就像是将window.undefine设置为window.undedefine以外的值,假设JS中的每个变量值都是一个对象,当有人做这样的事情时,就会跳出窗口。
-
正确-它们都有一个原型,尽管每个原型的不同
-
所有函数都是Javascript中的对象(参见下面的示例)
试试这些来证实你的信念。。。
alert(Function instanceof Object); // true
alert(Object instanceof Function); // true
alert(Array instanceof Object); // true
alert(Object instanceof Array); // false
alert(RegExp instanceof Function); // true
alert(Function instanceof RegExp); // false
这篇文章帮助我理解了javascript原型,这就是继承在javascript中的工作原理。
http://net.tutsplus.com/tutorials/javascript-ajax/prototypes-in-javascript-what-you-need-to-know/
- JavaScript对象不是从原型链继承的
- 如何使用原型继承编写一个整洁灵活的复杂javascript应用程序
- $emit,$broadcast,原型继承
- Javascript:继承原型而不重新定义构造函数
- 原型继承未按预期工作
- JavaScript中的原型继承.我可以称之为“超级”等价物吗?
- 为什么函数对象的实例没有继承函数原型属性
- 不创建父对象的原型继承
- Javascript基本继承与Crockford原型继承
- JavaScript-构造函数参数和原型继承
- 使用Object.create作为原型的原型继承将[Object]作为实例的原型
- javascript继承中正确的原型做作是什么
- 如何进行JavaScript原型继承(原型链)
- Javascript原型继承原型函数调用
- 对象不继承原型函数
- 从其他类继承原型方法,而不重写自己的原型方法
- JavaScript继承原型
- 继承原型
- Javascript继承/原型混淆
- 使用.call(this)继承原型