gpt4 book ai didi

javascript - 在 JavaScript 类 : this vs. var 中声明变量。区别?

转载 作者:太空狗 更新时间:2023-10-29 14:42:44 24 4
gpt4 key购买 nike

在 JavaScript 类中使用 thisvar 声明内部变量有什么区别?

例子:

function Foo( ) {
var tool = 'hammer';
}

function Foo2( ) {
this.tool = 'hammer';
}

我们知道的一个区别是 Foo2.tool 会产生“hammer”,而 Foo.tool 会产生 undefined。

还有其他区别吗?对一个与另一个的推荐?

谢谢!

最佳答案

这里没有“一个或另一个”,因为两者的目的不同。

考虑一下:

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
  • handitem.weapon 在 OOP 中是一个“公共(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com