gpt4 book ai didi

javascript - 你能解释一下这个对象的属性在这些不同情况下的行为吗

转载 作者:行者123 更新时间:2023-11-30 13:14:24 27 4
gpt4 key购买 nike

假设我有一个对象“msg”,我在以下情况下重新定义了它,但我不了解其属性(特别是 m1)的行为。为什么它在对象内部是未定义的,当我通过函数访问它时它给出了字符串值(最后一种情况)。你能解释一下每种情况吗

case 0
var msg = {
m1 : "this is string",
m2 : "ok, " + this.m1

};

console.log(msg.m1); //this is string
console.log(msg.m2); // ok, undefined
/////// why m1 is undefined inside msg
//------------------------------------------
case 1
var msg1 = new Object(msg);

console.log(msg1.m1); //this is string
console.log(msg1.m2); // ok, undefined
//again undefined

//------------------------------------------
case 2
var msg2 = {
m1 : function () { return "this is string";},
m2 : "ok, " + this.m1,
m3 : typeof this.m1

};

console.log(msg2.m1()); //this is string
console.log(msg2.m2); // ok, undefined
console.log(msg2.m3); // undefined
console.log(typeof msg2.m1) // function 'but inside msg2 it is undefined why'

//------------------------------------------
case 3
var msg3 = {
m1 : (function () { return "this is string";}()),
m2 : "ok, " + this.m1,
m3 : typeof this.m1
};
console.log(msg3.m1); //this is string
console.log(msg3.m2); // ok, undefined
console.log(msg3.m3); // undefined
console.log(typeof msg3.m1) // string (atleast i know why this is ) but inside msg2 it is not defined (why )

//------------------------------------------
case 4
var msg4 = {
m1 : (function () { return "this is string";}()),
m2 : function () { return "ok, " + this.m1; },
m3 : typeof this.m1
};
console.log(msg4.m1); //this is string
console.log(msg4.m2()); // ok, this is string
console.log(msg4.m3); // undefined
console.log(typeof msg4.m1) // string (atleast i know why this is ) but inside msg2 it is not defined and in m2 it evaluated (why so)

最佳答案

this 永远不会引用当前通过对象字面量语法生成的对象。

this 指的是环境的调用上下文。对象本身没有调用上下文,但它们可以用作调用上下文。

请注意您的 msg4.m2() 有效。这是因为 this 是函数的调用上下文,并且是对调用该方法的对象的引用,即 msg4 对象。

msg4 是如何成为m2 函数的调用上下文的?这是因为当您这样做时:

msg4.m2();

您正在msg4 对象上调用m2 。这会自动设置调用上下文,以便 this 指向 msg4 对象。

关于javascript - 你能解释一下这个对象的属性在这些不同情况下的行为吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12627225/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com