你如何在JavaScript中创build一个自定义对象的方法?

是不是…

var obj = new Object(); obj.function1 = function(){ //code } 

或类似的东西?

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

那么,这个方法可以这样调用:

 newObj.met1(); 

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

你可以从答案中看出,你已经有了不止一种方法。

 #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正在使用构造函数。 这意味着你可以使用它们来创build一些相同的'类'的对象(类真的不存在于JavaScript中)

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

#1,#2和#5几乎都是相当的。 这是因为可能一次只能有一个,所以#2的方法添加到原型并不重要。 (不考虑克隆)

还有更多的方法使用闭包或者向函数或私有嵌套函数添加“静态”属性/方法来将对象添加到对象… 🙂

一般使用原型属性:

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

有一件事我没有看到任何人提到,为什么你可能想要使用prototype属性,比如说,对象 – 文字符号:这样做可以确保函数定义在你的函数原型创build的对象的所有实例上共享,而比每个实例一次。

不要担心兄弟,这里的代码是:

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

用es6你可以这样做:

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

您也可以执行下列操作,而不是使用“Object.create()”方法。

函数调用:

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

function定义:

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