对象字面量被视为静态对象。
所以,对象字面量应该只包含静态变量,但是在下面的代码中
var obj = {
a : "hello",
foo : function(){
console.log(this.a);
console.log(obj.a);
}
};
我可以a
以静态方式obj.a
和非静态方式访问this.a
。
是a
静态变量吗?
对象字面量被视为静态对象。
所以,对象字面量应该只包含静态变量,但是在下面的代码中
var obj = {
a : "hello",
foo : function(){
console.log(this.a);
console.log(obj.a);
}
};
我可以a
以静态方式obj.a
和非静态方式访问this.a
。
是a
静态变量吗?
我认为你混淆了一堆不同的东西。
您创建了一个名为的对象,该对象obj
具有一个名为 的字段a
。该字段可以作为obj.a
(或者obj['a']
如果您愿意)访问。如果您安排一些其他变量来引用obj
,那么它也可以通过该变量获得。
安排其他变量指向的一种方法obj
是获取一个obj
定义为函数/闭包的字段,并使用“方法”语法调用它,如obj.foo()
. 这意味着在 的主体内部foo
,在该调用期间,特殊变量this
将引用obj
. 因此,该函数内的代码可以obj.a
通过this.a
.
这些都与静态与动态范围,或单例,或“类”与“实例”成员或任何这些无关。它只是一个对象。
对象字面量不是静态类,它是 ; 的实例Object
。因此obj.a
也不能是静态的。也许混淆在于{}
符号实际上创建了一个对象:
typeof {
a : "hello",
foo : function(){
console.log(this.a);
console.log(obj.a);
}
};
"object"
它相当于:
var obj = new Object();
obj.a = 'hello';
obj.foo = function() {}
结论
静态属性只在面向类的语言中有意义,但在 JavaScript 中类的相同概念可以说是不存在的。
obj.a
是“静态的”,即您引用它的方式。您只能在使用this
时以这种方式使用new obj()
- 所以obj
必须是一个函数。
默认情况下this
,当在作为对象成员的函数中使用时,它指的是父对象。在您的代码的情况下obj
是父对象。
使用原型和的示例this
:
var Obj = function(){this.a = "hi"};
Obj.prototype.foo = function(){
console.log(this.a);
}
Obj.b = "sth";
var myObj = new Obj();
myObj.foo(); // "hi"
console.log(myObj.b); // undefined
这不是那么简单,检查
let baba = {
a: 12,
foo: function () {
baba.a = 13;
this.a = 14;
},
roo: function () {
alert("baba.a = " + baba.a + "\nthis.a = " + this.a);
}
};
var theApp = {
start_action: function () {
let sola = Object.create(baba);
sola.foo();
sola.roo();
let bola = Object.create(baba);
bola.roo();
}
}
$(document).ready(theApp.start_action);
在 roo() 调用之后第一次调用 foo 我们得到: 13, 14 第二次调用 foo 13, 13