var red = {a: 2};
red.fn = function(b){
console.log("A: "+a ", B : "+b);
}
red.fn(20);
这给出了错误:
a
未定义
但我怀疑a
已作为函数fn
的全局对象可用,那为什么它不可访问。
任何解释都会有所帮助。
答案 0 :(得分:6)
因为与其他一些语言不同,this
限定符在JavaScript中不是可选的(因为它的工作原理与大多数具有red.fn = function(b){
console.log("A: " + this.a + ", B : " + b);
// ---------------------^^^^^
}
; more here的其他语言不同。你需要明确地写它:
+
(你在那里也失踪了php artisan config:cache
...)
答案 1 :(得分:0)
你去吧
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
现在,a
暗示您正在使用对象的属性(在RobG评论后编辑),其中public V put(K key, V value) {
if (table == EMPTY_TABLE) {
inflateTable(threshold);
}
if (key == null)
return putForNullKey(value);
int hash = hash(key);
int i = indexFor(hash, table.length);
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, key, value, i);
return null;
}
可以访问。
答案 2 :(得分:0)
此处变量a
将被翻译为window.a
undefined 。
因此,需要考虑变量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);
&#13;
object.a 或 red.a :
a = 5;
var red = {
a: 2
};
red.fn = function(b) {
console.log("A: " + red.a + ", B : " + b);
}
red.fn(20);
&#13;
如何将其翻译为以本地功能范围发布:
var red = function() {
var a = 2;
this.fn = function(b) {
console.log("A: " + a + ", B : " + b);
};
};
var redObj = new red();
redObj.fn(20);
&#13;