problem更改原型对象的方法

Posted 小车厂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了problem更改原型对象的方法相关的知识,希望对你有一定的参考价值。

现有一个 Page 类, 其原型对象上有许多以 post 开头的方法 (如 postMsg); 另有一拦截函数 chekc, 只返回 ture 或 false. 请设计一个函数, 该函数应批量改造原 Page 的 postXXX 方法, 在保留其原有功能的同时, 为每个 postXXX 方法增加拦截验证功能, 当 chekc 返回 true 时继续执行原 postXXX 方法, 返回 false 时不再执行原 postXXX 方法

function Page() {}

Page.prototype = {
  constructor: Page,

  postA: function (a) {
    console.log(‘a:‘ + a);
  },
  postB: function (b) {
    console.log(‘b:‘ + b);
  },
  postC: function (c) {
    console.log(‘c:‘ + c);
  },
  check: function () {
    return Math.random() > 0.5;
  }
}

function checkfy(obj) {
  for (var key in obj) {
    if (key.indexOf(‘post‘) === 0 && typeof obj[key] === ‘function‘) {
      (function (key) {
        var fn = obj[key];
        obj[key] = function () {
          if (obj.check()) {
            fn.apply(obj, arguments);
          }
        };
      }(key));
    }
  }
} // end checkfy()

checkfy(Page.prototype);

var obj = new Page();

obj.postA(‘checkfy‘);
obj.postB(‘checkfy‘);
obj.postC(‘checkfy‘);

参考:GitHub

我的理解:在 checkfy() 函数内部,因为 fn.apply() 调用,所以自调用的参数 key 才会接受 obj 的方法执行时的参数?

也不是很理解原理。


以上是关于problem更改原型对象的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何从活动中更改片段中视图的可见性

设计模式——原型模式

JavaScript this指向ES5组合继承(构造函数+原型对象)错误处理

JavaScript构造函数和原型原型链及this指向

关于原型继承的一些问题

循环链表和原型中更改对象属性时的错误