Я просто играю с идеей подкласса с Javascript. Мне нравится притворяться, что расширение собственных объектов (например, Array, String и т. Д.) - плохая идея. Это, правда, совершенно не в моем понимании, почему.Невозможно расширить прототип javascript
Сказав это, давайте продолжим.
То, что я пытаюсь сделать, это расширить массив (теперь, extend
не может быть правильный термин для того, что я делаю)
Я хочу создать новый класс и я хочу иметь 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]
. Так что это означает, что мой код изменяет собственный объект Array
. Что-то, чего я пытаюсь избежать. Как мне изменить этот код так, чтобы эти два console.log
s дали мне undefined
, но я все еще могу использовать собственные методы Array.prototype
, например .push
?
ТИА
Было бы также правильным сказать, что текущее содержимое 'MyArray' (конструктор) действительно не нужно? – Katana314
Нет, это не позволит мне делать «MyArray.prototype.add». '.add' не будет определен. – AdityaParab
@ Katana314: Нет! «Var arr = Object.create (Array.prototype);' в конструкторе - это просто явный способ сказать «var arr = []'; – AdityaParab