【问题标题】:Override javascript functions覆盖 javascript 函数
【发布时间】:2015-03-23 22:44:16
【问题描述】:

我想用这种方式覆盖js函数:

var elements = {
  "Element": {
    name: Element,
    events: ["focus","blur"]
  },
  "Window": {
    name: Window,
    events: ["scroll"]
  }
}

$.each(elements, function( k, v ) {
  $.each(v.events, function( i, val ) {
    if (val) {
      console.log(v.name.prototype[val]);

      v.name.prototype[val] = function () {
        return false;
      }
    }
  });
});

更新:已修复,有没有人建议如何让它变得更好?

demo

【问题讨论】:

  • 元素数组(元素、窗口)中的东西不是类的实例。它们只是对象。这意味着他们没有原型,就像a = {}; 有原型一样。
  • 那么,如果我将:name: "Element" 更改为 name: Element,那么一切都会好起来的?
  • 如果我们不知道预期的用例,我们无法帮助它变得更好。你想做什么?这似乎有点不正统。
  • 我在页面上有很多 iframe,显示页面预览,我通过覆盖阻止了 iframe 内的某些事件。

标签: javascript jquery arrays json javascript-objects


【解决方案1】:

元素数组(元素、窗口)中的东西不是类的实例。它们只是对象。这意味着他们没有原型,就像a = {}; 有原型一样。

如果您将这些字符串更改为指向类定义,那么您的代码应该可以工作。所以...

var elements = {
  "Element": {
    class: Element,
    events: ["focus","blur"]
  },
  "Window": {
    class: Window,
    events: ["scroll"]
  }
}

$.each(elements, function( k, v ) {
  $.each(v.events, function( i, val ) {
    if (val) {
      v.class.prototype[val] = function () {
        return false;
      }
    }
  });
});

说了这么多.. 你的代码对我来说似乎有点奇怪。你为什么要覆盖默认的WindowElement 原型?

【讨论】:

    猜你喜欢
    • 2010-10-30
    • 1970-01-01
    • 2011-07-21
    • 2014-06-09
    • 2013-04-06
    • 2017-05-29
    • 1970-01-01
    • 2016-06-19
    相关资源
    最近更新 更多