给Function对象添加方法的几种方式

1,添加静态方法

其实就是给对象增加属性,其值为一个function,可直接用点选择符进行调用。

//创建Function extend方法
Function.prototype.extend=function (w, v){
if (w == null) {
return this;
}
if (typeof w != “string”){
for (var x in w) {
this[x]=w[x];
}
}else{
this[w]=v;
}
return this;
}

//注册静态方法
var myFn=function(){};
myFn.extend({
say:function(){
alert(“I’m OK”);
},
cry:function(){
alert(“5555555″)
}
});
myFn.say();//return I’m OK

2,扩展原型对象

需创建新对象,然后调用新增方法,这是与静态方法的不同之处。

//创建Function implement方法
Function.prototype.implement=function (w, v){
if (w == null) {
return this;
}
if (typeof w != “string”){
for (var x in w) {
this.prototype[x]=w[x];
}
}else{
this.prototype[w]=v;
}
return this;
}

var myFn=function(){};

//扩展原型对象
myFn.implement(“alert”,function(text){
alert(text);

});
var newFn=new myFn();
newFn.alert(“Hahaha”);//return Hahaha

3,call,apply对象冒充

call与apply,用法一致,只是第二个参数不同。

call(_this,args,…);

它的第一个参数用作 this 的对象。其他参数都直接传递给函数自身。

apply(_this,[args,..,..]);

apply() 方法有两个参数,用作 this 的对象和要传递给函数的参数的数组。

function sayColor(sPrefix,sSuffix) {
alert(sPrefix + this.color + sSuffix);
};

var myFn = function(){
this.color = “blue”;
};

sayColor.call(myFn, “The color is”, “a very nice color indeed.”);
//return The color is blue a very nice color indeed.

sayColor.apply(myFn, ["The color is", "I love it."]);
//return The color is blue I love it..

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*