你如何在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(); }