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

Met*_*uru 50 javascript methods object

是不是......

var obj = new Object();

obj.function1 = function(){
    //code
}
Run Code Online (Sandbox Code Playgroud)

或类似的东西?

meo*_*ouw 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(){}
}
Run Code Online (Sandbox Code Playgroud)

#3和#4使用构造函数.这意味着您可以使用它们来创建相同"类"的多个对象(JavaScript中并不存在类)

#4与#3不同,因为用#4构造的所有对象将共享相同的'方法'方法,因为它是其原型的属性.这样可以节省内存(但只是非常小的数量),如果更改原型的方法,所有#4对象将立即更新 - 即使它们已经被实例化.

#1,#2和#5都非常相同.这是因为一次可能只有其中一个,所以#2将方法添加到原型中的事实并不重要.(不考虑克隆)

还有更多方法可以使用具有闭包的工厂或向函数或私有嵌套函数添加"静态"属性/方法来向对象添加方法... :)

  • #2不起作用.请从72个upvotes的答案中删除它:-) (2认同)

And*_*ech 53

var newObj = {
    met1 : function () {
        alert('hello');
    }
};
Run Code Online (Sandbox Code Playgroud)

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

newObj.met1();
Run Code Online (Sandbox Code Playgroud)

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

  • @PaulD.Waite:我认为没有逻辑差异,但是对象文字更紧凑,允许在同一语句中设置属性,并且通常是更容易接受的方式(http://stackoverflow.com/q/4597926)/1175459). (6认同)
  • "在声明一个新对象时,使用对象文字(`{}`),而不是`new Object()`构造函数." - 为什么? (5认同)

Chr*_*ato 13

一般使用prototype属性:

function YourObject()
{
    //
}

YourObject.prototype.yourMethod= function()
{
   //
}
Run Code Online (Sandbox Code Playgroud)

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

  • 对不起,这就是我的意思,是的; 我整个早上都在编写ActionScript.:)我会纠正的.嘿,谢谢那些贬低我的人; 感谢. (2认同)