是不是像...
var obj = new Object();
obj.function1 = function(){
//code
}
或类似的东西?
是不是像...
var obj = new Object();
obj.function1 = function(){
//code
}
或类似的东西?
您可以从您已有的答案中看到,方法不止一种。
#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 将方法添加到原型的事实并不重要。(不考虑克隆)
还有更多方法可以使用带闭包的工厂向对象添加方法,或者向函数或私有嵌套函数添加“静态”属性/方法...... :)
var newObj = {
met1 : function () {
alert('hello');
}
};
然后,可以像这样调用该方法:
newObj.met1();
顺便说一句,在声明一个新对象时,请使用对象字面量 ( {}
),而不是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);