我有点困惑于学习JavaScript的新ES6与ES5语法,特别是在涉及带有方法的函数/类和调用这些方法时,我无法确定什么是“正确的方式”。
例如,看一下这段代码:
function account(amount) {
let cash = amount;
this.setCash = function(amt)
{
cash = amt;
}
this.getCash = function()
{
return cash;
}
}
var person = new account(100);
console.log(person.getCash()); //returns 100
person.setCash(150);
console.log(person.getCash()); //returns 150
按照预期正常工作(当我浏览教程时,这就是我最初看到使用这些方法的方式)。
但是我偶尔会看到这种情况:
function account2(amount) {
let cash = amount;
function setCash(amt)
{
cash = amt;
}
function getCash()
{
return cash;
}
return{
getCash,
setCash
}
}
var person2 = new account2(50);
console.log(person2.getCash()); //returns 50
person2.setCash(175);
console.log(person2.getCash()); //returns 175
这两种方法都可以正常运行,而且做的和我想的一样。但是第一种方法是旧的方式吗?或者可能不正确的方式?这是我学习JS的最大障碍,因为自从ES6推出以来,就有很多不同的方式来做一些简单的事情,比如在JS中创建带有方法的“类”。
个人认为第一种方式更容易,因为你不必返回函数... 但是例如在工作中,我看到第二种方式被广泛使用?
account2
的实例,使用new
来调用account2()
没有意义。(它仍然可以得到期望的结果,但会产生误导。) - nnnnnnnew
没有太多意义。 - zerkmsnew
的情况下调用。无论哪种方式都不是语法错误(正如您已经展示的那样,它可以工作),但是new
会自动创建一个具有特定原型的对象,然后当函数显式地创建并返回另一个对象时,该对象被丢弃。 - nnnnnn