我正试图围绕Javascript继承,并想检查我的理解是否正确。当我在JS中声明Javascript函数时:
function Animal() {
}
现在第一个问题:
我宣布Function
个对象。这与例如没有区别。 JS附带的Array
。 Array
也是JS原生提供的Function
对象,对吗? Object
和RegExp
以及其他人也是如此吗?是吗?
说这个对象继承自Function
是不正确的,但有人可以向我解释原因吗?这是因为在Java和其他语言中没有使用正式类吗?或者是因为Animal
获取实际现有对象的属性而不是那种类在其他语言中的蓝图?还有其他原因吗?
对上述内容的澄清将非常感激,欢呼,
编辑:我的问题似乎造成了混乱,所以我应该澄清一下。 在第1点,我不会问Array返回什么。我只是想确认我的理解,函数Animal
和Array
都有共同点,它们的[[Prototype]]属性引用相同的Function.prototype
,因此两者都是{{1对象。如果我理解正确Function
与Animal
不同,则原因Array
和Animal.prototype
明显不同。
在第2点,我正在寻找解释为什么说“动物”从“功能”继承“不正确”。
我希望这更有意义,谢谢大家
答案 0 :(得分:0)
正确 - 所有人都有原型,虽然每个原型都不同
所有函数都是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/
答案 1 :(得分:0)
注意2:使用Animal构造函数创建的实例没有原型链的功能,但Animal构造函数本身确实具有Function up它的原型链:
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
所有对象实例(包括Function)在其原型链中都有Object,除非您使用Object.create传递null作为第一个参数。对我来说,这就像将window.undefined设置为window.undefined之外的值,假设JS中的每个变量值都是某个对象执行此类操作时窗口外的对象。