function Person(firstName, lastName, age)
{
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
var family = {};
family.mother = new Person("Susan", "Doyle", 32);
…
我们必须使用"这个"这里?为什么?
function …
{
firstName = firstName;
lastName = lastName;
age = age;
}
我想知道这个问题是否过于简单......
答案 0 :(得分:0)
此处this
需要引用当前对象的值。
如果您不使用this
关键字,则局部变量会被函数参数遮蔽。
在Person()
函数范围内 - 函数参数的优先级高于局部变量。这意味着在Person()
函数内部,默认情况下firstName
被视为函数参数,即使某个字段具有相同的名称。在这种情况下,要引用该字段,请使用this
关键字。
答案 1 :(得分:0)
在javascript中,这个单词是对调用对象的引用。
所以如果我们有一个全局函数
function () {console.log(this);} // Window
我们得到全局对象或窗口。
如果我们在对象中有更深层的功能
var obj = {f: function (){console.log(this);}};
obj.f(); // Object {f: function} we get the object that wraps the function.
如果我们使用apply调用模式
,则该规则被破坏obj.f.apply(window); // window is now bound to this.
在你的例子中,如果你只是打电话
Person(); // in global scope
你会有效地分配
window.firstName = // ...
window.lastName = // ...
window.age = //...
因为从全局范围调用时,this关键字绑定到窗口对象
您基本上创建了一个应该使用new运算符调用的构造函数。 new运算符使用一个创建对象的函数包装函数,并使用apply方法调用函数,并将对象作为this参数。
var bob = Person("bob"); // bob is undefined but you changed the window object
var sue = new Person("sue"); // sue is an object like you expect.
检查您的代码
var family = {}; // make an object
family.mother = new Person("Susan", "Doyle", 32);
因为你在函数执行之前使用了new,所以js为你创建一个新对象并使用apply模式到该对象。这是引擎盖下发生的事情
family.mother = {};
Person.apply(family.mother, ["Susan", "Doyle", 32]);
答案 2 :(得分:0)
这是定义对象构造函数的正确方法。你可以参考here
注意 此不是变量。这是一个关键字。您无法更改此的值。