【发布时间】:2017-12-30 20:44:54
【问题描述】:
好的,我一直在阅读https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new 并且发现自己在类方案中编写了一堆对象构造代码。
为了保持向后兼容性,我很少使用“类”关键字/语法。
你可能以前见过这个:
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
//Usage: var carinstance = new Car("blah","blah","blah");
但我发现这非常适合我的使用(偶然发现):
function Player (name) {
var p = {
name : name,
age : 18
};
return p;
}
//Usage: var person = new Player("Jon");
我知道它有效,因为我已经使用它了。 我只是不知道这是否合适。
例如,我可以使用相同的代码而没有“new”关键字(相同的结果):
var person = Player("Jon");
但我不能对第一个规范做同样的事情(在函数中使用'this'关键字):
var car = Car("blah","blah","blah"); //car == undefined
我真的不知道如何在 Google 上搜索它,也不知道如何称呼它。我很难弄清楚这个问题应该有什么标题。
我想一个更明确的方式来提出这个问题: 我得到的结果是否只是 javascript、浏览器引擎等的夸克?或者这是制作构造函数的可靠方法?
【问题讨论】:
-
您的第一种方法使用构造函数,就像您使用
this一样,您必须使用new或Object.create来创建对象。在您的第二种方法中,您正在返回一个对象,但它不使用构造函数。当您开始使用prototype时,将会有 1 个主要区别。使用new创建的对象将具有您定义的原型,而其他对象将只有默认原型 -
是的,这是
this在 JavaScript 中如何工作的夸克。不隶属于以下频道,但这些是了解这里发生的事情的绝佳资源! The new keyword .... "this & Object Prototypes"
标签: javascript function object constructor new-operator