【发布时间】:2010-10-05 00:35:03
【问题描述】:
是不是……
var obj = new Object();
obj.function1 = function(){
//code
}
或者类似的?
【问题讨论】:
标签: javascript object methods
是不是……
var obj = new Object();
obj.function1 = function(){
//code
}
或者类似的?
【问题讨论】:
标签: javascript object methods
您可以从已有的答案中看出,方法不止一种。
#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 将方法添加到原型中这一事实并不重要。 (不考虑克隆)
还有更多方法可以使用带闭包的工厂向对象添加方法,或者向函数或私有嵌套函数添加“静态”属性/方法...:)
【讨论】:
hasClass)?
var newObj = {
met1 : function () {
alert('hello');
}
};
然后,方法可以这样调用:
newObj.met1();
顺便说一句,在声明新对象时,请使用对象字面量 ({}),而不是 new Object() 构造函数。
【讨论】:
{}),而不是 new Object() 构造函数。" - 为什么?
一般使用prototype属性:
function YourObject()
{
//
}
YourObject.prototype.yourMethod= function()
{
//
}
我还没有看到任何人提到的一件事是为什么你可能想要使用 prototype 属性而不是对象文字表示法:这样做可以确保函数定义在创建的对象的所有实例之间共享您的函数原型,而不是每次实例化一次。
【讨论】:
别着急,代码如下:
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 createObject(theProto, theConst) {
function x() {};
x.prototype = theProto;
x.prototype.constructor = theConst;
return new x();
}
【讨论】: