我刚开始学习 JavaScript 中的继承概念。在这种情况下,我想继承 Array 对象并向其添加功能。
我在这里面临的问题是第三个方法正确执行,但 show() 方法抛出错误,指出 show() 方法> 不是一个函数。
var a = [1,2,3,4,5];
Array.prototype = {
third:function(){
console.log(a[3]);
},
show:function(){
console.log(a);
}
};
a.third();
a.show();
最佳答案
问题在于您的代码试图用仅具有您分配的属性的普通对象替换内置原型(prototype)(其本身是一个数组)。不要替换原型(prototype),而是向已有的原型(prototype)添加属性,例如
Array.prototype.third = function() {
console.log(a[3]);
}
此外,由于您在替换 Array.prototype 之前创建了 a 数组,因此它得到的是旧原型(prototype),而不是新原型(prototype)(如果添加了新原型(prototype)) )。这两种方法都会抛出错误,而不仅仅是show。如果您在创建a之前更改原型(prototype),则它在允许覆盖内置原型(prototype)的浏览器中“有效”。它在 ECAMScript ed 3(或更早版本)实现或更高版本中不起作用,其中 Array.prototype 具有属性:
{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }
所以你不能替换它并且对象本身有属性:
{ [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }
这样您就可以根据需要添加属性并覆盖内置方法。
请注意,通常会警告不要扩展内置对象,请参阅 Extending builtin natives. Evil or not? .
关于javascript - 关于javascript中继承数组对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32375073/