新手:Javascript构造函数和范围上下文问题
Newbie: Javascript constructor and scope-context issue
我对JS构造函数中的上下文有什么问题感到困惑。在 ctor 中,我声明了一个函数。在调用该函数之前,this
设置为 ctor 的上下文。在函数内部,this
的值设置为 window
。我不明白为什么。在 HTML 中,ctor 被调用为"new"。
function MyCtor() {
var myFunc = function() {
debugger; // #2
// code for myFunc
}
debugger; // #1
myFunc();
debugger; // #3
}
在调试器 #1 中,this
设置为 MyCtor
。在#2 this
是window
。在#3,它又回到了MyCtor
.
确定我在这里遗漏了一些基本的东西,但我读了很多关于范围和上下文的内容;显然还不够。
this
对象是Javascript中最令人讨厌的难以理解的概念之一。这是一场相当激烈的比赛...首先,您必须了解它将特定于您调用的每个函数 - 您调用 myFunc 的上下文不会按照您想要的方式设置它。这里有一种方法可以做到这一点:
function MyCtor() {
this.myFunc = function() {
debugger; // #2
// code for myFunc
}
debugger; // #1
this.myFunc();
debugger; // #3
}
通常,只有少数情况下,您可以将函数的this
作为特定值。据我所知,所有这些都是:
objectToBeThis.aFunction = function() { ... } // declare this function as
// an object property at any time -
objectToBeThis.aFunction();
或者,不经常使用的是:
aFunction.call(objectToBeThis, extraArgument1, extraArgument2);
当调用一个命名但不是"拥有"的函数(即var functionName = function()
或function functionName()
(时,它将window
作为其this
参数。这部分我不太确定,但我只是不会在这种方法中使用this
。
与代码的情况一样,还有"new MyCtor" - 在其中创建一个要返回的新对象,并且该对象设置为在构造函数方法内部this
。
相关文章:
- 将函数的上下文应用于javascript变量
- 正在全局范围中查找JavaScript函数
- 如何通过数组更新角度子范围
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- 使用JQuery的动态上下文菜单
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- 如何访问UIWebView'的子窗口上下文
- HTML范围:动态设置值属性
- "实例范围”;TypeScript类的getter/setter
- 构造函数函数中的自执行函数的OO上下文/范围
- 如何更改对 javascript 属性的调用的范围/上下文
- JavaScript 范围和执行上下文
- ES6 循环和 forEach 中的上下文和变量范围
- 更改 Ember.ComputedProperty 的上下文/范围
- 新手:Javascript构造函数和范围上下文问题
- Javascript/jQuery 范围和上下文问题,当试图操作对象的“引用”时
- 术语执行上下文和范围之间是否有区别?
- 如何访问对象上下文和范围
- Durandal小部件的内部功能范围和上下文
- 功能范围和上下文的差异