// JavaScript JSON
var myCode =
{
message : "Hello World",
helloWorld : function()
{
alert(this.message);
}
};
myCode.helloWorld();
上面的 JavaScript 代码将提示“未定义”。
要使其真正起作用,代码需要如下所示...(注意 myCode.message 的文字路径)
// JavaScript JSON
var myCode =
{
message : "Hello World",
helloWorld : function()
{
alert(myCode.message);
}
};
myCode.helloWorld();
我的问题是...如果我以这种方式使用 json 声明函数,是否有某种“相对”方式来访问 myCode.message,或者是否只能使用文字命名空间路径 myCode.message 来访问?
最佳答案
您的第一个示例有效,helloWorld
函数中的 this
值将引用 myCode
对象本身,因为您通过 myCode.helloWorld();
当您调用作为对象成员的函数时,此对象将被设置为该函数的 this
值。
在这种情况下,myCode
是 myCode.helloWorld
引用的基础对象。
关于 this
关键字如何隐式还有两种情况,例如,当您调用未绑定(bind)为任何对象的属性的函数时,即:
myFunc();
myFunc
中的 this
值将指向全局对象。
当您使用 new
运算符时:
var obj = new MyFunc();
MyFunc
中的 this
值将引用新创建的对象。
并且您可以使用 call
显式设置函数的 this
值或 apply
:
function test () {
return this + " World";
}
test.call("Hello"); // "Hello World"
请注意,这不是 JSON ,JSON只是一种数据交换格式,其语法与JavaScript不同Object Literal syntax ,例如:
{ foo: "bar" }
上面是一个有效的 JavaScript 对象文字,但不是有效的 JSON,JSON 要求属性标识符用引号括起来,并且它允许的数据类型集有限,例如,你不能有 函数 作为 JSON 对象的成员。
关于javascript - 使用 JSON 定义的函数时是否可以使用相对语法访问 JSON 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2776970/