加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > C语言 > 正文

JS设计模式:函数添加方法addMethod

发布时间:2020-12-15 00:31:23 所属栏目:C语言 来源:网络整理
导读:Function.prototype.addMethod = function(name,fn) { this[name] = fn; return this;}Function.prototype.addProtoMethod = function(name,fn) { this.prototype[name] = fn; return this;} var Method = function() {}; Method.addMethod('checkName',func
Function.prototype.addMethod = function(name,fn) {
    this[name] = fn;
    return this;
}
Function.prototype.addProtoMethod = function(name,fn) {
    this.prototype[name] = fn;
    return this;
}

var Method = function() {};
Method.addMethod('checkName',function() { return this;});

var testA = new Method();

Method.addProtoMethod('checkAge',function() {return this;});

var testB = new Method();

Method.addMethod('checkName',function() { return this.print();});

Function.prototype.print = function() {console.log('666');}

Method.checkName() //666

Method本身可以调用原型链上的addMethod(),他的实例不会有checkName(),checkName()属于公有方法,checkAge()属于公有方法。

> Function.prototype.addMethod = function(name,fn) {
...     this[name] = fn;
...     return this;
... }
[Function]
> Function.prototype.addProtoMethod = function(name,fn) {
...     this.prototype[name] = fn;
...     return this;
... }
[Function]
>
> var Method = function() {};
undefined
> Method.addMethod('checkName',function() { return this.print();});
{ [Function] checkName: [Function] }
> Function.prototype.print = function() {console.log('666');}

for(var property in Method) {
... console.log(property);
... }
checkName
addMethod
addProtoMethod
print

Method.prototype.talk = function() {return false;}
[Function]
for(var property in Method) {
... console.log(property); //
... }
checkName
addMethod
addProtoMethod
print
Method.test = function() {talk();}
[Function]
Method.test()
ReferenceError: talk is not defined

因为 Method 是Function 的实例,所以Function.prototype自定义添加的属性会显示。
而对Method.prototype而言,Method只是一个构造函数(类似合作关系),所以 talk()不会被找到。 (__proto__与prototype区别)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读