繁体   English   中英

为什么无法从“ fn”访问属性“ a”

[英]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.ared.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM