在此和 var 的JavaScript类中声明内部变量之间有什么区别?
例子:
function Foo( ) {
var tool = 'hammer';
}
function Foo2( ) {
this.tool = 'hammer';
}
我们知道的一个区别是Foo2.tool将产生“锤子”,而Foo.tool将产生未定义的。
还有其他区别吗?对一个建议与另一个建议?
谢谢!
最佳答案
这里没有“一个或另一个”,因为两者的目的是不同的。
考虑一下:
var Melee = function(){
//private property
var tool = 'hammer';
//private method
var attack = function(){
alert('attack!');
};
//public property
this.weapon = 'sword';
//public methods
this.getTool = function(){
return tool; //can get private property tool
};
this.setTool = function(name){
tool = name; //can set private property tool
};
};
var handitem = new Melee();
var decoration = new Melee();
//public
handitem.weapon; //sword
handitem.getTool(); //hammer
handitem.setTool('screwdriver'); //set tool to screwdriver
handitem.getTool(); //is now screwdriver
//private. will yield undefined
handitem.tool;
handitem.attack();
//decoration is totally different from handitem
decoration.getTool(); //hammer
OOP中的
handitem.weapon
是一个“公共(public)属性(property)”,可以从外部访问。如果我创建了这个Melee
实例,则可以访问和修改weapon
,因为它是向公众开放的。 handitem.tool
是“私有(private)属性(property)”。它只能从对象内部访问。它是不可见的,不可访问的,并且不能(至少直接)从外部进行修改。尝试访问它会返回undefined
handitem.getTool
是“公共(public)方法”。由于它位于对象的内部,因此可以访问私有(private)属性tool
并从外部为您获取。通往私有(private)世界的桥梁。 handitem.attack
是私有(private)方法。像所有私有(private)物品一样,只能从内部进行访问。在这个例子中,没有办法调用attack()
(所以我们可以免受攻击:D)关于javascript - 在JavaScript类: this vs. var中声明变量。不同之处?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9765659/