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/

    10-13 02:15