为什么此函数中的 "this" 关键字不会在 JavaScript 中给出重复错误?
Why is the "this" keyword in this function not giving an error in JavaScript for duplication?
function makeUser() {
return {
name: "John",
ref() {
return this;
}
};
}
let user = makeUser();
alert(user.ref().name);
根据我从中学到的知识tutorial,它们定义为点之前的对象,因为这是函数的 return 值,我认为它会是用户。
而这个tutorial将其定义为正在执行当前函数的对象。
我认为执行当前函数的对象是user。当你用它的值替换它时,它变成 alert(user.user.name);
.
“this”的值不是指对象的名称,而是指对象本身。所以这里没有“重复”,你只是返回一个对象,它恰好是你开始时使用的同一个对象。
如果你把事情分开,这可能会更清楚:
function makeUser() {
// Create an object
let myObject = {
name: "John"
};
// Create a function which returns that object
let myFunction = function(){ return myObject; };
// Store the function on the object
myObject.ref = myFunction;
// Return the new object
return myObject;
}
// Create an object
let user = makeUser();
// Get the name from the object
alert(user.name);
// Call the ref() function, which happens to return the same object
let otherUser = user.ref();
// Get the name again
alert(otherUser.name);
// No matter how many times you call .ref() it will return the same object
alert(user.ref().ref().ref().ref().name);
this 指的是函数函数所属的对象,或者 window 对象,如果它不属于任何对象。
在这种情况下,ref() 函数是 returning 所有者对象
例如,
当你调用 ref() 时,它会return像这样
{ name: 'John', ref: [Function: ref] }
function makeUser() {
return {
name: "John",
ref() {
return this;
}
};
}
let user = makeUser();
alert(user.ref().name);
根据我从中学到的知识tutorial,它们定义为点之前的对象,因为这是函数的 return 值,我认为它会是用户。
而这个tutorial将其定义为正在执行当前函数的对象。
我认为执行当前函数的对象是user。当你用它的值替换它时,它变成 alert(user.user.name);
.
“this”的值不是指对象的名称,而是指对象本身。所以这里没有“重复”,你只是返回一个对象,它恰好是你开始时使用的同一个对象。
如果你把事情分开,这可能会更清楚:
function makeUser() {
// Create an object
let myObject = {
name: "John"
};
// Create a function which returns that object
let myFunction = function(){ return myObject; };
// Store the function on the object
myObject.ref = myFunction;
// Return the new object
return myObject;
}
// Create an object
let user = makeUser();
// Get the name from the object
alert(user.name);
// Call the ref() function, which happens to return the same object
let otherUser = user.ref();
// Get the name again
alert(otherUser.name);
// No matter how many times you call .ref() it will return the same object
alert(user.ref().ref().ref().ref().name);
this 指的是函数函数所属的对象,或者 window 对象,如果它不属于任何对象。 在这种情况下,ref() 函数是 returning 所有者对象 例如,
当你调用 ref() 时,它会return像这样
{ name: 'John', ref: [Function: ref] }