首页 > 解决方案 > 无法读取未定义的属性“应用”

问题描述

我正在尝试理解 .apply-method。所以,我创建了以下代码:

var o = new Object();
o.method = function(x, y) {
  return x + y
};

o.method = (function(original) {
  return function(x, y) {
    var a = 'A';
    var b = 'B';
    var result = original.apply(this, [a, b]);
    return result;
  }
})(o.method);

console.log(o.method(1, 2));

我认为最后一个打开和关闭的括号可能是空的,所以方法 o.method 被自动调用。但是有空括号

o.method = (function(original) {
  return function(x, y) {
    var a = 'A';
    var b = 'B';
    var result = original.apply(this, [a, b]);
    return result;
  }
})();

o.method(1, 2);

我收到以下错误:无法读取未定义的属性“应用”

有人可以解释一下为什么吗?

亲切的问候亨宁

标签: javascript

解决方案


如果调用函数function(original) {},则返回函数function(x, y) {}并在参数上创建闭包original。所以里面的代码function(x, y) {}总是可以访问你传递给的东西function(original) {}

和:

o.method = (function(original) {
  return function(x, y) {
    // ... 
  }
})(o.method);

您将function(x, y) {}具有闭包的返回函数分配originalo.method将原始o.method函数作为参数传递。

如果你现在写o.method(1,2) 你调用返回function(x, y) {}

如果您function(original) {}在没有参数的情况下调用它,那么将会(function(original) {})()导致 您发布的错误。originalundefinedoriginal.apply


推荐阅读