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来实现?
你的第一个例子工作,函数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
将引用新创建的对象.
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对象的成员.