2015-02-25 4 views
0

Я мог бы создать объект с некоторыми методами, а затем добавить свойство к нему следующим образом:Добавление методов к объекту JavaScript

var myObj = (function() { 
    var my = {}; 
    my.method1=function(){} 
    my.method2=function(){} 
    my.method3=function(){} 
    return my; 
    }()); 
myObj.myProperty=123; 

Как я могу создать объект первого и добавить свойство, а затем добавить методы позже?

myObj={}; 
myObj.myProperty=123; 
//How do I add the above methods to myObj? 
+0

'myObj.my = {method1: функция()}' – tymeJV

+0

Почему вы не можете использовать 'myObj.method1 = функция() {}'? –

+0

Я предполагаю, что вы не просто выполняете 'myObj.method1 = function() {};', потому что хотите, чтобы функции определялись в их собственной области? В противном случае я действительно не понимаю, в чем проблема. –

ответ

1

Я предполагаю, есть два решения:

Объединить объекты:.

var myObj = {...}; 
// ... 
var objWithMethods = (function() { ... }()); 
Object.assign(myObj, objWithMethods); 

(Object.assign является Н. Методы ES6 polyfill можно найти в ссылке, библиотеки часто также обеспечивают метод с аналогичным поведением).

Передавайте объект метода должна быть назначена в качестве аргумента:

var myObj = {}; 
myObj = (function (obj) { 
    var my = obj || {}; 
    my.method1=function(){} 
    my.method2=function(){} 
    my.method3=function(){} 
    return my; 
}(myObj)); 
+0

Спасибо Феликс. Не могли бы вы порекомендовать один подход над другим? Я предполагаю, что я поеду со вторым вариантом, если не подумать иначе. – user1032531

+0

На этом этапе наиболее важным фактором является то, что тот, кто читает код, понимает, что происходит. –

+0

Ну, я определенно понимаю второй подход, но в настоящее время не первый подход. Предположим, я должен изучить их оба. Благодаря! – user1032531

0

Вы можете сделать расширить операцию с использованием существующего объекта

var myObj = {...} 

var myAdditionalMethods = { someMethod : function(){ } } 

//extend the object 
for(var i in myAdditionalMethods) 
    if(!myObj.hasOwnProperty(i)) 
     myObj[i] = myAdditionalMethods[i]; 

есть много библиотек, которые имеют эту функцию встроенный, но так вы можете сделать это без одного

0

Даже прототип может добавить функции к исходному объекту.

var myObj = function() { 
 
    this.myProperty = 123; 
 
} 
 

 
myObj.prototype.method1 = function method1() { 
 
    alert("method1") 
 
} 
 
myObj.prototype.method2 = function method2() { 
 
    alert("method2") 
 
} 
 
var newObj = new myObj(); 
 
newObj.method1(); 
 
newObj.method2(); 
 
console.log(newObj)

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