好的,所以我一直在阅读https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new 并发现自己在一类方案中编写了一堆对象构造代码。
为了保持向后兼容性,我没有多多使用'class'关键字/语法。
您之前可能已经看过:
system()
但我发现这对我的使用非常有效(偶然发现):
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
//Usage: var carinstance = new Car("blah","blah","blah");
我知道它有效,因为我已经习惯了。 我只是不知道这是否合适。
例如,我可以使用相同的代码w / o'new'关键字(相同的结果):
function Player (name) {
var p = {
name : name,
age : 18
};
return p;
}
//Usage: var person = new Player("Jon");
但我不能对第一个规范做同样的事情(在函数中使用'this'关键字):
var person = Player("Jon");
我真的不知道如何谷歌这个,或者称之为什么。我很努力想弄清楚这个问题应该有什么标题。
我想这是一个更明确的方式来提出这个问题: 我得到的结果只是javascript,浏览器引擎等等吗?或者这是构建函数函数的可靠方法吗?
答案 0 :(得分:1)
执行以下操作。
function Car(make, model, year) {
if ( !(this instanceof Car) )
return new Car(make, model, year);
this.make = make;
this.model = model;
this.year = year;
}
然后你可以在没有新的情况下调用它。
答案 1 :(得分:1)
因为在Player
函数中,它返回p
个对象。因此,如果您使用new
运算符调用Player
函数,它将是p
对象,但不是默认创建的对象。当然,当您使用它时,它也将返回p
对象一般情况下请致电Player
。但是,在Car
函数中,它不会返回一个对象。因此,当您使用new
运算符调用Car
函数时,它将返回默认创建的对象,它将返回{ {1}}通常会调用undefined
函数。
你可以参考: