2013-03-28 4 views
0

Я хочу, чтобы расширить свойства для всех массив с простой функцией (это для моей домашней работы)Продление свойства массива Javascript

Array.prototype.remove=(function(value){ 
var i; 
var cleanedArray = new Array(); 
for(i= 0;i<this.length;i++) 
{ 
    if(value !== this[i]) 
    { 
     cleanedArray.push(this[i]); 
    } 
} 

this.length = cleanedArray.length; 
for(i=0;i<this.length;i++) 
{ 
    this[i] = cleanedArray[i]; 
} })(); 

var simpleArray = new Array(3,5,6,7,8,1,1,1,1,1,1,1); 
simpleArray.remove(1); console.log(simpleArray); 

, но я получаю сообщение об ошибке в консоли, может кто-нибудь мне помочь?

ошибка:

Uncaught TypeError: Property 'remove' of object [object Array] is not a function 
+2

Вы можете добавить ошибку на ваш вопрос? –

+1

Какая ошибка вы получаете? Pls помещает вывод в SO. – RaphMclee

ответ

2

Чтобы объявить функцию, вам не нужны эти скобки и вам не нужно называть его.

Вы можете объявить его как

Array.prototype.remove=function(value){ // <== no opening parenthesis before function 
    var i; 
    var cleanedArray = new Array(); 
    for(i= 0;i<this.length;i++) { 
     if(value !== this[i]) 
     { 
      cleanedArray.push(this[i]); 
     } 
    } 
    this.length = cleanedArray.length; 
    for(i=0;i<this.length;i++) { 
     this[i] = cleanedArray[i]; 
    } 
    }; // <== simply the end of the function declaration 

Похоже, вы были смущены с IIFE, но вам не нужно, чтобы построить здесь.

Если вы хотите, чтобы ваша функция не перечислимы, вы можете сделать это с помощью Object.defineProperty:

Object.defineProperty(Array.prototype, "remove", { 
    enumerable: false, // not really necessary, that's implicitly false 
    value: function(value) { 
     var i; 
     var cleanedArray = new Array(); 
     for(i= 0;i<this.length;i++) { 
      if(value !== this[i]) 
      { 
       cleanedArray.push(this[i]); 
      } 
     } 
     this.length = cleanedArray.length; 
     for(i=0;i<this.length;i++) { 
      this[i] = cleanedArray[i]; 
     } 
    } 
}); 

Demonstration

+0

спасибо, но теперь у меня еще одна проблема: функции remove отлично работают, но у моего массива есть новый элемент, который является _remove: function_ –

+1

Если вы хотите, чтобы ваша функция (которая является свойством) не была перечислимой, вы можете использовать [Object .defineProperty] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty). См. Править. –

+0

спасибо за быстрый ответ –

Смежные вопросы