javascript - 使用 JSON 定义的函数时是否可以使用相对语法访问 JSON 属性?

标签 javascript json namespaces this

// 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 值。

在这种情况下,myCodemyCode.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/

相关文章:

python - __name__ ==“__main__”怎么办?

database-design - 数据库中是否需要命名空间?

javascript - D3.js - 将力定向图节点从圆形更改为 svg :rect

javascript - jquery 动态可折叠列表不起作用; jsfiddle 示例

php - Swift Json 连接失败。 JSON 对象正确吗?

json - 在 Golang 中解析 JSON 以绘制多边形

javascript - 将包含数组的 Javascript 对象序列化为 json?

r - 获取作为参数传递给函数的函数名称

javascript - 如何从div的样式覆盖css

javascript - 如何使用 javascript 以 html 形式显示文本文件中的文本