gpt4 book ai didi

javascript - 无法扩展 javascript 原型(prototype)

转载 作者:行者123 更新时间:2023-12-03 06:09:52 25 4
gpt4 key购买 nike

我只是在尝试用 Javascript 进行子类化的想法。我喜欢假装扩展 native 对象(如数组、字符串等)是一个坏主意。无论事实如何,这完全超出了我的理解范围。

话虽如此,让我们继续吧。

我想做的是扩展数组(现在,扩展可能不是我正在做的事情的正确术语)

我想创建我的新类 MyArray 并且我想在它上面有 2 个方法。 .add.addMultiple

所以我是这样实现的。

function MyArray(){
var arr = Object.create(Array.prototype);
return Array.apply(arr, arguments);
}

MyArray.prototype = Array.prototype;

MyArray.prototype.add = function(i){
this.push(i);
}

MyArray.prototype.addMultiple = function(a){
if(Array.isArray(a)){
for(var i=0;i<a.length;i++){
this.add(a[i]);
}
}
}

这工作正常,但如果我这样做

console.log(Array.prototype.addMultiple );
console.log(Array.prototype.add);

我得到[Function][Function]。所以这意味着我的代码正在修改 native Array 对象。我试图避免的事情。如何更改此代码,使这两个 console.log 会给我 undefined 但我仍然能够使用 native Array.prototype 方法,如 .push

TIA

最佳答案

您应该设置正确的原型(prototype)链:

function MyArray(){
Array.apply(this, arguments);
}

MyArray.prototype = Object.create(Array.prototype);

Object.create只是创建具有指定原型(prototype)的新对象,因此在此操作之后以下内容为真:

MyArray.prototype !== Array.prototype; // true
Object.getPrototypeOf(MyArray.prototype) === Array.prototype; // true

关于javascript - 无法扩展 javascript 原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39371020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com