2017-01-17 2 views
0

Мне нужно запустить метод, принадлежащий ко всем экземплярам объекта. Например, если бы я имел метод FULLNAME(), который сцепляет .firstName и .secondName, я хотел бы сделать это для обоих экземпляров объекта в коде:Как вызвать метод для всех экземпляров объекта

<script> 
    function x(firstName, secondName) { 
     this.firstName = firstName; 
     this.secondName = secondName; 
     this.fullName = function() { 
      console.log(this.firstName + this.secondName); //this should output result of both john.fullName() and will.fullName() 
     } 
    } 
    var john = new x("John ", "Smith"); 
    var will = new x("Will ", "Adams"); 
</script> 

Как это достигается в JavaScript? Предпочтительно, это было бы без указания количества экземпляров, и вместо этого просто запустить метод для всех созданных экземпляров. Заранее спасибо.

+0

Возможный дубликат [Итерация над объектными значениями объекта] (http://stackoverflow.com/questions/9354834/iterate-over-object-literal-values) – Hodrobond

+0

определите 'this.fullName =' as 'x.prototype.fullName =', и он мгновенно будет работать повсюду. вывести его из конструктора тоже ... – dandavis

+0

есть оператор [instanceof] (https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Operators/instanceof), который вы можете использовать – maioman

ответ

2

Это возможно, но имейте в виду, что любой x создан никогда не будет мусора

Первоначально я имел следующий код

var x = (function() { 
    var objs = []; 
    var x = function x(firstName, secondName) { 
     this.firstName = firstName; 
     this.secondName = secondName; 
     objs.push(this); 
     this.fullName = function() { 
      objs.forEach(function(obj) { 
       console.log(obj.firstName + obj.secondName); //this should output result of both john.fullName() and will.fullName() 
      }); 
     }; 
    }; 
})(); 
var john = new x("John ", "Smith"); 
var will = new x("Will ", "Adams"); 
will.fullName(); 

однако, я думал об этом и думаю, что это имеет смысл

var x = (function() { 
    var objs = []; 
    var x = function x(firstName, secondName) { 
     this.firstName = firstName; 
     this.secondName = secondName; 
     objs.push(this); 
     this.fullName = function() { 
      console.log(this.firstName + this.secondName); //this should output result of both john.fullName() and will.fullName() 
     }; 
    }; 
    x.fullName = function() { 
     objs.forEach(function(obj) { 
      obj.fullName(); 
     }); 
    } 
    return x; 
})(); 
var john = new x("John ", "Smith"); 
var will = new x("Will ", "Adams"); 
x.fullName(); 
+0

Спасибо за хорошо продуманный ответ. –

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