附加到 DOMWindow 实例而不是自身实例的嵌套方法调用
Nested method call attached to an instance of DOMWindow instead of self
someSingleton = (function() {
var someFunction = function() {
console.log(this);
someOtherFunc();
};
var someOtherFunc = function() {
console.log(this);
};
return {
method: someFunction
}
})();
someSingleton.method();
如果运行这个,你会注意到第一个方法将按预期返回对象,第二个嵌套方法调用someOtherFunction将返回DOMWindow对象。
除了将实例(this(作为参数传递给第二个方法之外,我如何使第二个方法调用引用包含对象而不是DOMWindow。
someOtherFunc.call(this);
它仅取决于函数的调用方式,而不取决于函数的定义位置或方式。
您可以使用 call
方法 [MDN] 显式指定函数的调用上下文:
var someFunction = function() {
console.log(this);
someOtherFunc.call(this);
};
this
到 window
的错误绑定是一个常见的 JavaScript 错误。
理解JavaScript中的this
可能是一个挑战。我可以推荐阅读 Douglas Crockford 的 Javascript: The Good Parts,以便更好地理解。同时,您可以查看此链接:)http://javascriptweblog.wordpress.com/2010/08/30/understanding-javascripts-this/
父对象分配给变量that
是很常见的。这样,您可以通过它访问它的属性和函数:
(function(){
var that = this;
that.someFunc = function(){};
that.someOtherFunc = function(){
console.log(that);
};
})();
一种常见的方法是使用 bind
函数来存储方法的上下文。一个简单的例子可能看起来像这样:
someSingleton = (function() {
var singleton = {};
var _bind = function (func, me) {
return function () {
func.apply(me, arguments);
}
}
var someFunction = _bind(function() {
console.log(this);
someOtherFunc();
}, singleton);
var someOtherFunc = _bind(function() {
console.log(this);
}, singleton);
singleton.method = someFunction;
return singleton;
})();
someSingleton.method();
相关文章:
- 用嵌套函数和默认函数定义函数
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 可以简化嵌套的延迟Q Promises解析吗
- 用于搜索的聚合物嵌套绑定
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- d3中堆栈函数和嵌套函数之间的差异
- 如何打印嵌套对象的所有值
- JavaScript 中的嵌套函数和 “this” 关键字
- 附加到 DOMWindow 实例而不是自身实例的嵌套方法调用
- 嵌套函数中的 JavaScript 实例共享
- 为什么我只能在嵌套闭包链的第一个实例中声明变量
- Ember.js:如何访问嵌套视图实例
- 如何获得嵌套视图模型的实例
- Javascript生成嵌套对象的实例
- 对象不支持此操作'当“newing"嵌套的Javascript对象实例
- 存储实例用于嵌套映射/对象
- 如何制作“这个”?关键字引用当前实例,如果从嵌套对象's方法中使用
- 将模板实例数据作为关键字参数传递给嵌套模板
- backbone.js模型指向嵌套模型的同一实例
- 是为每个嵌套函数创建的单独闭包实例