Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么是;这";定义参数时是否需要?_Javascript_This - Fatal编程技术网

Javascript 为什么是;这";定义参数时是否需要?

Javascript 为什么是;这";定义参数时是否需要?,javascript,this,Javascript,This,我们必须在这里使用“this”吗?为什么 function Person(firstName, lastName, age) { this.firstName = firstName; this.lastName = lastName; this.age = age; } var family = {}; family.mother = new Person("Susan", "Doyle", 32); … 我想知道这个问题是否太简单了…这里这个是引用当前对象的值所必

我们必须在这里使用“this”吗?为什么

function Person(firstName, lastName, age)
{
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
}

var family = {};
family.mother = new Person("Susan", "Doyle", 32);
…

我想知道这个问题是否太简单了…

这里
这个
是引用当前对象的值所必需的

如果不使用
this
关键字,则局部变量会被函数参数隐藏

window.firstName = // ...
window.lastName = // ...
window.age = //...

Person()
函数范围中-函数参数的优先级高于局部变量。这意味着在
Person()
函数中,默认情况下,
firstName
被视为函数参数,即使存在同名字段。在本例中,引用字段时使用
this
关键字。

在javascript中,this是对调用对象的引用

如果我们有一个全局函数

function …
{
     firstName = firstName;
     lastName = lastName;
     age = age;
  }
我们得到全局对象或窗口

如果我们在一个对象中有一个更深的函数

function () {console.log(this);} // Window
如果我们使用apply调用模式,这个规则就会被打破

var obj = {f: function (){console.log(this);}};
obj.f(); // Object {f: function} we get the object that wraps the function.
在你的例子中,如果你只是打电话

obj.f.apply(window); // window is now bound to this.
你将有效地分配

Person(); // in global scope
因为从全局范围调用时,this关键字绑定到窗口对象

您基本上创建了一个应使用新运算符调用的构造函数。新操作符将函数包装为一个创建对象的操作符,并使用apply方法调用函数,该方法将对象作为this参数

window.firstName = // ...
window.lastName = // ...
window.age = //...
检查您的代码

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.
因为在函数执行之前使用了new,所以js会为您创建一个新对象,并对该对象使用apply模式。这就是引擎盖下发生的事情

var family = {}; // make an object
family.mother = new Person("Susan", "Doyle", 32);

这是定义对象构造函数的正确方法。你可以得到推荐信

  • 这个关键字 在JavaScript中,称为this的对象是“拥有”JavaScript代码的对象
  • 的值在函数中使用时,是“拥有”函数的对象
  • 的值在对象中使用时为对象本身
  • 对象构造函数中的this关键字没有值。它只是新对象的替代品
  • 当使用构造函数创建对象时,的值将成为新对象

  • 注意此不是一个变量。这是一个关键词。您不能更改此的值

    firstName=firstName
    基本上是一个No-Op。将局部变量分配给它自己。JavaScript并没有那么神奇<代码>这是引用新创建的对象的唯一对象。@xxkkk当然可以。如果这有助于你的理解,我也能得到一个提升投票吗?这需要15个声誉,我是新来的,对不起,我稍后会投票…