JavaScript学习笔记(二十九) method()方法

method()方法

JavaScript很可能让那些习惯了从类的角度思考的程序猿感动疑惑。这也是为什么一些程序猿选择让JavaScript更类一些(class-like)。
其中一种尝试就是method()方法,这种方法让JavaScript更class-like的方法不是一个被推荐的方式,然而它是一种有趣的模式,并且你可能在一些程序中无意间碰到过。

使用构造方法看起来就像在Java中使用类一样,他们能让你在构造方法中给this添加实例属性(instance properties)。
然而给this添加方法是低效的,因为它们最后在每个实例创建时都会被创新创建一次,这回消耗更多内存。这也是为什么复用的(reusable)方法应该被添加到构造方法的prototype属性。prototype在很多程序猿看起来就像外星人一样,那么你可以将它隐藏在一个方法背后.

使用method()方法去定义一个类型,看起来可能就像下面一样:
var Person = function (name) {
    this.name = name;
}.
    method('getName', function () {
        return this.name;
    }).
    method('setName', function (name) {
        this.name = name;
        return this;
    });
注意构造方法是如何链式调用方法method()的。
method()方法接受两个参数:
  • 新方法的名字
  • 方法的实现
这个新方法被添加给Person“类”,实现仅仅是另外一个函数,并且在实现函数的中,this指向Person创建的对象,就像你期望的一样。

接下来你可以使用Person()去创建一个新对象:
var a = new Person('Adam');
a.getName(); // 'Adam'
a.setName('Eve').getName(); // 'Eve'
再次注意链式模式的使用,因为setName()返回this变的可能。

最后,看一下method()函数是如何实现的:
if (typeof Function.prototype.method !== "function") {
    Function.prototype.method = function (name, implementation) {
        this.prototype[name] = implementation;
        return this;
    };
}
在这个实现中,首先尽职的做了一些检查,这个方法是否已经被实现了。
如果没有,我们继续将作为参数传递implementation函数添加给构造方法prototype的属性。
在这种情况下,this指向构造函数,构造函数的原型是可扩展的。





  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值