2009-02-02 103 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>

相关问题