如何在JavaScript中为自定义对象创建方法?

时间:2009-02-02 20:42:37

标签: javascript object methods

是不是......

var obj = new Object();

obj.function1 = function(){
    //code
}

或类似的东西?

7 个答案:

答案 0 :(得分:88)

您可以从答案中看到,您已经有多种方式。

#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 :(得分:53)

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

然后,可以像这样调用该方法:

newObj.met1();

顺便说一句,在声明一个新对象时,请使用对象文字({}),而不是new Object()构造函数。

答案 2 :(得分:13)

通常使用prototype属性:

function YourObject()
{
    //
}

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

我还没有看到有人提到的一件事是为什么你可能想要使用prototype属性,比如对象 - 文字符号:这样做可以确保函数定义在对象的所有实例之间共享从您的函数原型创建,而不是每次实例化。

答案 3 :(得分: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());

答案 4 :(得分: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);

答案 5 :(得分:1)

使用es6,你可以这样做:



isSame

var a = {
    func(){
        return 'The value';
    }
}
    
document.getElementById('out').innerHTML = a.func();
   




答案 6 :(得分: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();
}