javascript中的成员函数调用的一个小问题
首先看demo代码:
var student={
name:"leo",
intro:function(){
alert("my name is "+this.name);
}
}
var teacher=function(f){
f();
}
teacher(student.intro);
在上面的demo,可以看到显式的定义了一个对象student,有一个成员函数intro和一个成员变量。
另外定义了一个函数teacher,接受一个函数作为参数,并调用了这个函数。
试运行,我们将student的成员函数intro作为参数传给teacher函数调用。本来intro会访问student的成员变量name,但是在实际运行中却不像我们想的那样,被teacher调用以后,intro内部使用的this就不是指向student而是指向window对象了。
可以看到,这种情况下,成员函数失去了他本身的对象环境,而暴露在外面作为window对象的成员函数了。
这个例子可以帮助我么理解javascript的运行机制和对象机制。
另外,这种情况的解决方法,我觉得是利用caller或者callee来做,具体如何做,还有待进一步实验。
相关文档:
AA.HTM
-------------------------------------
<!--
showModalDialog函数的使用 (转)
本范例可以实现弹出一个模态窗口,并演示了两种接收和传递参数的方法,同时可以接受模态窗口返回的多个变量
-->
<html> &nbs ......
在js中,每个对象都有一个prototype属性:返回对象类型原型的引用。很拗口!习语“依葫芦画瓢”,这里的葫芦就是原型,那么“瓢.prototype” 返回的就是葫芦,或者“瓢.prototype= new 葫芦()”。
prototype的用途:
继承
有一个对象--子类:
function 子类() {
this.lastname = ......
//把数据写入数据库
function
res(){
//获取输入值(myname和mymail是两个文本框的id)
var
uname = document.getElementById("myname"
).value;
var
umail = document.getElementById("mymail"
).value;
......
你知道世界上有多少种浏览器吗?除了我们熟知的IE, Firefox, Opera, Safari四大浏览器之外,世界上还有近百种浏览器。
几天前,浏览器家族有刚诞生了一位小王子,就是Google推出的Chrome浏览器。由于Chrome出生名门,尽管他还是个小家伙,没有人敢小 ......