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

Jus*_*ent 3 javascript json namespaces this

// JavaScript JSON
var myCode = 
{
   message : "Hello World",

   helloWorld : function()
   {
     alert(this.message);
   }
};
myCode.helloWorld();
Run Code Online (Sandbox Code Playgroud)

上面的JavaScript代码会提醒'undefined'.

为了使它真正起作用,代码需要如下所示...(注意myCode.message的文字路径)

// JavaScript JSON
var myCode = 
{
   message : "Hello World",

   helloWorld : function()
   {
     alert(myCode.message);
   }
};
myCode.helloWorld();
Run Code Online (Sandbox Code Playgroud)

我的问题是......如果我以这种方式使用json声明函数,是否有一些"相对"方式来访问myCode.message或者是否只能使用文字命名空间路径myCode.message来实现?

CMS*_*CMS 6

你的第一个例子工作,函数this内部的helloWorld值将引用myCode对象本身,因为你调用它myCode.helloWorld();

当您调用作为对象成员的函数时,此对象将被设置为this函数的值.

在这种情况下myCode基本对象的的myCode.helloWorld参考.

关于this关键字的隐式方式还有两种情况,例如,当您调用未绑定为任何对象属性的函数时,即:

myFunc();
Run Code Online (Sandbox Code Playgroud)

this里面的值myFunc将指向全局对象.

当您使用new运营商时:

var obj = new MyFunc();
Run Code Online (Sandbox Code Playgroud)

this里面的值MyFunc将引用新创建的对象.

您可以this使用call或者显式设置函数的值apply:

function test () {
  return this + " World";
}
test.call("Hello"); // "Hello World"
Run Code Online (Sandbox Code Playgroud)

只是注意,这不是JSON,JSON只是一种数据交换格式,其语法与JavaScript Object Literal语法不同,例如:

{ foo: "bar" }
Run Code Online (Sandbox Code Playgroud)

以上是一个有效的JavaScript对象文字,但是无效的JSON,JSON要求将属性标识符包装在引号之间,并且它允许一组有限的数据类型,例如,您不能将函数作为JSON对象的成员.