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

标签 javascript inheritance prototype extend

我只是在尝试用 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/

相关文章:

c++ - 继承二级基类构造函数: silent error

java - 将子类对象添加到 ArrayList<Base Class>

javascript - Javascript 中基本原型(prototype)设计的问题

javascript - 如何使用 jquery 按值设置下拉选项?

javascript - JS Lodash : Multidimensional array to object, 有所变化

c# - 是否可以使派生类的字段也被派生?

jquery - Richfaces 是否需要 PrototypeScript.js

javascript - 我怎样才能让这个动画在javascript中表现得更好?

javascript - jQuery param 动态对象名称

javascript - 对于原型(prototype) ajax,使用上下文相当于什么?