method()方法

method()方法

JavaScript很可能让那些习惯了从类的角度思考的程序猿感动疑惑。这也是为什么一些程序猿选择让JavaScript更类一些(class-like)。

其中一种尝试就是method()方法,这种方法让JavaScript更class-like的方法不是一个被推荐的方式,然而它是一种有趣的模式,并且你可能在一些程序中无意间碰到过。

 

使用构造方法看起来就像在Java中使用类一样,他们能让你在构造方法中给this添加实例属性(instance properties)。

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

 

使用method()方法去定义一个类型,看起来可能就像下面一样:

 
  1. var Person = function (name) {

  2. this.name = name;

  3. }.

  4. method('getName', function () {

  5. return this.name;

  6. }).

  7. method('setName', function (name) {

  8. this.name = name;

  9. return this;

  10. });

注意构造方法是如何链式调用方法method()的。

method()方法接受两个参数:

  • 新方法的名字
  • 方法的实现

这个新方法被添加给Person“类”,实现仅仅是另外一个函数,并且在实现函数的中,this指向Person创建的对象,就像你期望的一样。

 

接下来你可以使用Person()去创建一个新对象:

 
  1. var a = new Person('Adam');

  2. a.getName(); // 'Adam'

  3. a.setName('Eve').getName(); // 'Eve'

再次注意链式模式的使用,因为setName()返回this变的可能。

 

最后,看一下method()函数是如何实现的:

 
  1. if (typeof Function.prototype.method !== "function") {

  2. Function.prototype.method = function (name, implementation) {

  3. this.prototype[name] = implementation;

  4. return this;

  5. };

  6. }

在这个实现中,首先尽职的做了一些检查,这个方法是否已经被实现了。

如果没有,我们继续将作为参数传递implementation函数添加给构造方法prototype的属性。

在这种情况下,this指向构造函数,构造函数的原型是可扩展的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值