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

IT技术 javascript object methods
2021-02-23 01:41:31

是不是像...

var obj = new Object();

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

或类似的东西?

6个回答

您可以从您已有的答案中看到,方法不止一种。

#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 将方法添加到原型的事实并不重要。(不考虑克隆)

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

#2 不起作用。请将其从 72 票赞成的答案中删除:-)
2021-04-18 01:41:31
如何hasClass为每个 HTML 元素定义方法(例如)?
2021-05-02 01:41:31
var newObj = {
    met1 : function () {
        alert('hello');
    }
};

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

newObj.met1();

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

@PaulD.Waite:我相信没有逻辑上的区别,但对象文字更紧凑,允许在同一语句中设置属性,并且通常是更容易接受的方法(stackoverflow.com/q/4597926/1175459)。
2021-04-27 01:41:31
“在声明一个新对象时,使用对象字面量 ( {}),而不是new Object()构造函数。” - 为什么?
2021-05-02 01:41:31

一般使用prototype属性:

function YourObject()
{
    //
}

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

我还没有看到任何人提到的一件事是为什么您可能想要使用该prototype属性而不是对象字面量表示法:这样做可以确保函数定义在从函数原型创建的对象的所有实例之间共享,而不是每个实例化一次。

呃,不,实际上那行不通。您可以通过将方法添加到函数的原型属性然后实例化它来向对象添加方法,但不能通过修改实例上名为“prototype”的属性。
2021-04-20 01:41:31
更正,并删除了我的反对票。FWIW,我对你投了反对票,因为你的例子不正确,而且你在名单的首位——遗憾的是,并不是每个人都费心去验证他们投票的答案是否真的有效。
2021-04-20 01:41:31
抱歉,这就是我的意思,是的;我整个上午都在编写 ActionScript。:) 我会改正的。嘿,感谢那些对我投反对票的人;感谢。
2021-05-05 01:41:31
谢谢。FWIW,我会认真检查我的后续评论;一看到你的,我就开始纠正。没有必要投票。
2021-05-09 01:41:31

兄弟别着急,代码如下:

  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());

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);