2009-02-02 100 views

回答

48
var newObj = { 
    met1 : function() { 
     alert('hello'); 
    } 
}; 

然後,該方法可以被稱爲像這樣:

newObj.met1(); 

順便說一句,聲明一個新對象時,使用對象文字({}),而不是new Object()構造函數。

13

一般採用prototype屬性:

function YourObject() 
{ 
    // 
} 

YourObject.prototype.yourMethod= function() 
{ 
    // 
} 

有一件事我還沒有看到任何人提及卻又是爲什麼你可能想通過使用prototype屬性,比如對象的文字符號:這樣做保證了函數定義在通過函數原型創建的對象的所有實例之間共享,而不是在每個實例化一次的情況下共享。

+0

呃,不,實際上這是行不通的。您可以將方法添加到某個對象的原型屬性中,然後對其進行實例化,而不是通過修改實例上名爲「prototype」的屬性來添加方法。 – Shog9 2009-02-02 20:57:14

+2

對不起,這就是我的意思,是的;整個上午我一直在編寫ActionScript。 :)我會糾正的。嘿,謝謝誰低估了我;感謝。 – 2009-02-02 20:59:55

+0

Jeez,去輕鬆的人們 - 這個概念是絕對正確的。 – 2009-02-02 21:02:54

83

你可以從答案中看出,你已經有了不止一種方法。

#1 
var o = new Object(); 
o.method = function(){} 

#2 
var o = new Object(); 
o.prototype.method = function(){} 

#3 
function myObject() { 
    this.method = function(){} 
} 
var o = new myObject(); 

#4 
function myObject() {} 
myObject.prototype.method = function(){} 
var o = new myObject(); 

#5 
var o = { 
    method: function(){} 
} 

#3和#4正在使用構造函數。這意味着您可以使用它們來創建多個具有相同「類」的對象(這些類實際上並不存在於JavaScript中)

#4與#3不同,因爲所有使用#4構造的對象將共享一個相同的'方法'方法,因爲它是它們原型的一個屬性。這樣可以節省內存(但數量非常少),如果更改原型的方法,所有#4對象都會立即更新 - 即使它們已經被實例化。

#1,#2和#5幾乎都相當。這是因爲可能一次只有其中之一,所以#2將原型添加到原型的事實並不重要。 (不考慮克隆考慮)

有添加方法使用帶有封閉或添加「靜態」屬性/方法或私人嵌套函數工廠的對象仍然更多的方式... :)

1

Function.prototype.implement = function(member, value) { 
    this[member] = value; 
    return this; 
} 

function MyFunction() { 
//... 
} 

(function($){ 

$.implement("a", "blabla") 
.implement("b", function(){ /* some function */ }) 
.implement("c" {a:'', b:''}); 

})(MyFunction); 
2

別擔心兄弟,這裏的代碼是:

var myObj=function(){ 
     var value=null 

    this.setValue=function(strValue){ 

    this.value=strValue; 
    }; 

    this.getValue=function(){ 
    return this.value; 
    };  
}; 

你可以調用這個對象是這樣的:

var obj= new myObj(); 
    obj.setValue("Hi!"); 
    alert(obj.getValue()); 
0

您也可以執行以下操作而不是使用「Object.create()」方法。

函數調用:

com.blah.MyChildObj.prototype = createObject(com.blah.MyParentObj.prototype, 
    com.blah.MyChildObj); 

函數定義:

function createObject(theProto, theConst) { 
    function x() {}; 
    x.prototype = theProto; 
    x.prototype.constructor = theConst; 
    return new x(); 
} 
1

隨着es6,你可以做這樣的:

var a = { 
 
    func(){ 
 
     return 'The value'; 
 
    } 
 
} 
 
    
 
document.getElementById('out').innerHTML = a.func(); 
 
<div id="out"></div>

相關問題