为什么"这个"定义参数时需要什么?

时间:2015-05-22 03:23:18

标签: javascript this

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;
  }

我想知道这个问题是否过于简单......

3 个答案:

答案 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

  1. 关键字 在JavaScript中,名为 this 的东西是“拥有”JavaScript代码的对象。
  2. this 的值,在函数中使用时,是“拥有”该函数的对象。
  3. 的值,在对象中使用时,就是对象本身。
  4. 对象构造函数中的 this 关键字没有值。它只是新对象的替代品。
  5. 当构造函数用于创建对象时, this 的值将成为新对象。
  6. 注意 不是变量。这是一个关键字。您无法更改的值。