我使用像
这样的函数创建了一个类
function Person(name) {
this.name = name;
}
var obj = new Person("Ferdinand");
console.log(obj.name);

我正在创建一个对象obj并打印它的属性名称它工作正常并打印" Ferdinand",但是如果我们忘记写下如下程序的新关键字 -
function Person(name) {
this.name = name;
}
var obj = Person("Ferdinand");
console.log(name);

在这里,我无法理解为什么名称在控制台中可用,它是打印" Ferdinand"。但是我们使用Person作为函数并在函数本身中分配名称变量,以便为什么它的值在函数外可用。
答案 0 :(得分:2)
JavaScript没有实现经典意义上的对象。相反,它们是直接实现的:
var thing={}; // new object
因为您通常希望多个对象遵循常见的模式和行为,所以您可以使用所谓的构造函数函数来提供帮助。在您的示例中,Person
是构造函数。
使用构造函数时,使用new
命令将其称为间接:
var thing = new Person(…);
事实上,这里有很多魔术:
var thing={};
。this
关键字分配给新对象this
值分配本地值。如果直接调用构造函数 ,前两个步骤不适用,并且该函数试图在其自己的this
定义中工作,这通常不是你的想。
如果你真的想在不打扰new
的情况下调用构造函数,可以尝试以下方法:
function Person(data) {
// “new” safe constructor
if(!(this instanceof Person)) {
return new Person(data);
}
这个新版本会检查它是否被调用为正确的构造函数,如果没有,则会自动调用它。