[英]why property 'a' is not accessible from 'fn'
var red = {a: 2};
red.fn = function(b){
console.log("A: "+a ", B : "+b);
}
red.fn(20);
这给出了错误:
a
没有定义
但是我怀疑a
已经可以作为函数fn
的全局对象使用,那么为什么它不能访问。 任何解释都会有所帮助。
因为与其他语言不同, this.
限定符在JavaScript中不是可选的(因为它的工作原理与大多数其他具有this
语言根本不同; 更多内容请参见)。 您需要明确地编写它:
red.fn = function(b){
console.log("A: " + this.a + ", B : " + b);
// ---------------------^^^^^
}
(您也在那里错过了+
)
干得好
var red = {a: 2}; red.fn = function(b){ console.log("A: "+this.a+ ", B : "+b); //update this line } red.fn(20);
编辑:要使a
在首次尝试时可在fn
访问,应首先将其声明为全局变量,例如var a = 2
。 仍然是作为全局对象变量访问它的有效方法,但是您应该使用console.log("A: "+red.a+ ", B : "+b);
现在, this.a
表示您正在使用对象的属性(在RobG的注释之后进行编辑),其中a
是可访问的。
在这里,变量a
将转换为未定义的 window.a
。
因此,此事要取决于变量a
的范围 。 如同在后答案已经提到的,我们可以通过使用封装的变量this.a
或者我们也可以使用red.a
。
包括一些进一步探讨的示例:
window.a
:
a = 5; var red = { a: 2 }; red.fn = function(b) { console.log("A: " + a + ", B : " + b); } red.fn(20);
object.a或red.a :
a = 5; var red = { a: 2 }; red.fn = function(b) { console.log("A: " + red.a + ", B : " + b); } red.fn(20);
如何将其翻译为本地函数范围 :
var red = function() { var a = 2; this.fn = function(b) { console.log("A: " + a + ", B : " + b); }; }; var redObj = new red(); redObj.fn(20);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.