对象字面量被视为静态对象。对象字面量和静态变量
因此,对象常量应该只包含静态变量,但在下面的代码段
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
。因此,该功能中的代码可以通过this.a
访问obj.a
。
这与静态与动态作用域,单例或“类”与“实例”成员或任何这些都没有任何关系。这只是一个对象。
更重要 - 你可以做一些类似'var func = obj.foo'的文件,并打破'this'引用! – Christoph
obj.a
是“静态”的,你指的是它的方式。当使用new obj()
时,您只会以这种方式使用this
- 因此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
对象常量是不是一个静态类,它的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中相同的类概念可以说是不存在的。
“对象文字被视为静态对象”。真? – bfavaretto
大多数语言都可以通过'Type.var'和'this.var'引用静态变量。能够使用'this.var'进行引用不会使其非静态。 – mellamokb
@bfavaretto它表现得像单身人士没有?你不能做var b = new obj(); – JohnJohnGa