Javascript 为什么是;这";定义参数时是否需要?
我们必须在这里使用“this”吗?为什么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); … 我想知道这个问题是否太简单了…这里这个是引用当前对象的值所必
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);
这是定义对象构造函数的正确方法。你可以得到推荐信
注意此不是一个变量。这是一个关键词。您不能更改此的值
firstName=firstName
基本上是一个No-Op。将局部变量分配给它自己。JavaScript并没有那么神奇<代码>这是引用新创建的对象的唯一对象。@xxkkk当然可以。如果这有助于你的理解,我也能得到一个提升投票吗?这需要15个声誉,我是新来的,对不起,我稍后会投票…