javascript函数扩展问题

这个函数该如何理解?

Function.prototype.method=function(name,func){
    this.prototype[name]=func;
    return this;
};
阅读 5k
4 个回答

给Function对象增加一个扩展原型方法的方法,使用该方法发可以增加Function的新的方法name,并返回该对象本身(看样子是要链式操作)。在日常开发中经常会给一个外部引入类库或方法增加自己的私有方法,但又不希望直接修改原文件或里面代码,而是以一种更加灵活的方法进行扩展,就可以使用以上方式。例如:

//lib.js
function people(){
  this.name='';
}
people.prototype.say=function(){
  return this.name;
}

//index.html文件中调用people.js的方法,并进行功能扩展

   var lib=(function(obj){
      obj.prototype.run=function(){
    }
    return obj;
   })(people);

   //通过上面的代码,people方法就多了一项run的功能。

   Function.prototype.method=function(name,func){
      this.prototype[name]=func;
      return this;
   }; 
   上面的代码提供了一种**扩展方法的方法**,比如使用以上方法,就可以增加自己的一个方法:

   Function.method('baobao',function(){
      console.log('5188');
   });

   完成上面方法拓展,就可以调用

   Function.baobao();

主要是给对象添加原型属性。。
function MyClass(aa) {
this.aa = aa;
// blabla....
}

MyClass.prototype.getSomeProp = function (name) {
return this[name];
}

为了提高上面这种添加原型属性/方法的效率,就有了给Function原型拓展method的方法了。。。
MyClass.method("getAnother", function(){});

而method中返回this,是为了方便链式语法的使用。。。

为了在多次给Function添加的属性的时候,偷懒用。


Function.prototype.method=function(name,func){ this.prototype[name]=func; return this;//返回this 是为了链式写法 有点像JQuery那样 }; function a(){ } a.method('say',function(){ console.log("look me") }).method('wawa',function(){ console.log("返回this,链式写法") }) var A = new a(); //a的构造方法指向了Function,a是Function的实例对象,所以a有method方法 console.log(a.constructor)//Function (){} console.log(A.say())//look me console.log(A.wawa())//返回this,链式写法

从上面的例子,我想你能看出来 Function.prototype.method 其实是扩展了 Function添加原型(实例)方法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题