WEB开发网
开发学院网页设计JavaScript javascript必知必会之this关键字及scope 阅读

javascript必知必会之this关键字及scope

 2009-09-28 00:00:00 来源:WEB开发网   
核心提示: 那么从上面的简单例子来看, this 总是在 运行时 才能确定其具体的指向, 也才能知道它的调用对象.而 这点也正是 动态语言 一个重要特性.那么如何确定当前this指向的引用对象呢? 通常可以这样判断:如果在global的scope(可以参见下面的说明来明确什么是global scope)来调

那么从上面的简单例子来看, this 总是在 运行时 才能确定其具体的指向, 也才能知道它的调用对象.而 这点也正是 动态语言 一个重要特性.

那么如何确定当前this指向的引用对象呢? 通常可以这样判断:

如果在global的scope(可以参见下面的说明来明确什么是global scope)来调用,则指向的是bowser的顶级对象window 例如: get_name()

如果, 有类似于这样的引用, innerobj.get_name() 则很显然this指向的是innerobj

如果我们使用了apply, call来进行强制的引用对象指向, 则也会很显然地指向强制的对象,如 get_name.apply(obj).

关于apply和call

这2个关键字可以很简单地理解为 进行this引用对象(运行空间)强制转换, 二者的语法如下:

fun.call(object, arg1, arg2, ...)
fun.apply(object, [arg1, arg2, ...])

二者目的是相同的(动态更改函数的运行空间, 或者称作更改this指向的对象), 只是在提供给函数的参数上的调用方法不同.

示例代码如下:

var test_call_apply = function(name, gender, school){
alert(this.age + name + gender + school);
};
test_call_apply.call({age:24}, "zhutao", "male", "ISCAS");
test_call_apply.apply({age:24}, ["zhutao", "male", "ISCAS"]);

scope详述

先看下面几个例子:

var global_scope = "I'm global";
var fun = function(){
var fun_scope = "I'm in fun scope";
return innerfun(){
var inner_func_scope = "I'm in the inner fun scope";
return global_scope + fun_scope + inner_func_scope; //此处的引用是重要的,请特别注意
};
};
alert(fun()());

上一页  1 2 3 4  下一页

Tags:javascript this 关键字

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接