javascript函数扩展问题
天蓬老师
天蓬老师 2017-04-10 15:36:59
[JavaScript讨论组]

这个函数该如何理解?

Function.prototype.method=function(name,func){
    this.prototype[name]=func;
    return this;
};
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(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,是为了方便链式语法的使用。。。

PHPz

为了在多次给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添加原型(实例)方法。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号