Javascript 对象文字和静态变量
对象文字被视为静态对象 因此,对象文字应该只包含静态变量,但在下面的代码段中Javascript 对象文字和静态变量,javascript,Javascript,对象文字被视为静态对象 因此,对象文字应该只包含静态变量,但在下面的代码段中 var obj = { a : "hello", foo : function(){ console.log(this.a); console.log(obj.a); } }; 我可以以静态方式obj.a和非静态方式this.a访问a a是一个静态变量吗?obj.a是“静态的”,即您对它的引用方式。在使用new obj()时,您只能以这种方式使用this——因此
var obj = {
a : "hello",
foo : function(){
console.log(this.a);
console.log(obj.a);
}
};
我可以以静态方式obj.a
和非静态方式this.a
访问a
a
是一个静态变量吗?obj.a
是“静态的”,即您对它的引用方式。在使用new obj()
时,您只能以这种方式使用this
——因此obj
必须是一个函数
默认情况下,当在作为对象成员的函数中使用时,此
引用父对象。在代码的情况下,obj
是父对象
使用原型和此的示例:
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 literal不是一个静态类,它是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
。该字段可以作为obj.a
(或者obj['a']
访问,如果您愿意的话)。如果您安排其他变量引用obj
,那么也可以通过该变量使用该变量
安排其他变量指向obj
的一种方法是获取定义为函数/闭包的obj
字段,并使用“方法”语法调用它,如obj.foo()
中所述。这意味着在foo
的主体内,在调用期间,特殊变量this
将引用obj
。因此,该函数中的代码可以通过this.a
访问obj.a
所有这些都与静态范围与动态范围、单例、或“类”与“实例”成员或任何其他成员无关。它只是一个对象。这并不是那么简单,请检查
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“对象文字被视为静态对象”。真的吗?在大多数语言中,静态变量都可以通过Type.var
和this.var
引用。能够使用this.var
进行引用并不能使它成为非静态的。@bfavaretto它的行为像单例一样吗?您不能执行var b=new obj();JavaScript中没有静态变量。抛开所有你从java或任何你所学的语言中了解的东西,学习JavaScript——这经常被误解,但如果你花时间去了解它的原型性质,你会惊讶于它的强大,尽管它有几个“缺点”就经典思维而言,更重要的是,你可以做一些类似于var func=obj.foo
的事情,打破这个
参考!