【发布时间】:2014-02-23 10:03:56
【问题描述】:
我有以下功能:
var Setup = function() {
var that = this;
this.x = 60;
Setup.prototype.Loop = function() {
console.log(this.x); // 1: returns 'undefined'
console.log(Setup.x); // 2: returns 'undefined'
console.log(hi.x); // 3: returns '60'
console.log(that.x); // 4: returns '60'
}
}
var hi = new Setup();
我想知道从Setup.prototype.Loop 函数访问this.x 构造函数的正确 方法是什么?
我尝试了四种方法(见上文):只有第三行和第四行给了我想要的结果。诚然,行号。 3 不是最好的方法,因为它依赖于对象hi。行号4 似乎是我能想到的最好的东西。
我得到了它的工作,但我正在努力学习最好的做事方式。有没有其他方法或更好的方法来做到这一点?
另外,我想这是一个以前必须问过的问题,但不知何故我找不到找到问题的词。另外,如果我在这里和那里使用了一些错误的术语,请原谅我。
感谢您的回复!
【问题讨论】:
-
4.方法是要走的路,通过使用 hi 你正在访问槽实例而不是父闭包(那个)。
-
根本不应该有任何输出,因为你从不调用
Loop。一个问题是 Loop 是作为函数而不是构造函数调用的,所以它不应该以大写 L 开头。另一个是你在构造函数体中设置了原型函数,这意味着你不知道共享原型对象和在构造函数主体中运行的特定于实例的代码之间的区别。或许下面的答案可以帮到你:stackoverflow.com/a/16063711/1641941Prototype 不是那么容易理解,有什么不明白的欢迎追问。 -
@HMR - 我确实不太了解原型,您链接到的帖子是关于 SO 的最佳书面答案之一。非常感谢。
-
谢谢你,它在编写它时帮助了我,并尝试改进答案帮助我更好地理解这一点。
标签: javascript function scope this