js call()

desmond_assis 2013-05-31 05:18:45
<script>
var Class1 = function() {
this.name = "class1"; // if define as "var name = 'class1'", then we cannot use Class1.name
this.showNum = function() {
alert(this.name);
};
};

var Class2 = function() {
this.name = "class2";
alert("bf"+this.name); // class2
Class1.call(this);
alert("af"+this.name); // class1
}

var c2 = new Class2();
c2.showNum(); // class1

</script>
为什么alert()结果为"class1"? "Class1.call(this);"到底是把谁的指针给谁呢?
求赐教~
...全文
126 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2013-05-31
  • 打赏
  • 举报
回复
通过call或者apply来改变对象的this指向,对象冒充就是这么来的
  • 打赏
  • 举报
回复
引用 楼主 firemaple_li 的回复:
<script> var Class1 = function() { this.name = "class1"; // if define as "var name = 'class1'", then we cannot use Class1.name this.showNum = function() { alert(this.name); }; }; var Class2 = function() { this.name = "class2"; alert("bf"+this.name); // class2 Class1.call(this); alert("af"+this.name); // class1 } var c2 = new Class2(); c2.showNum(); // class1 </script> 为什么alert()结果为"class1"? "Class1.call(this);"到底是把谁的指针给谁呢? 求赐教~
var Class1 = function() { this.name = "class1"; // if define as "var name = 'class1'", then we cannot use Class1.name this.showNum = function() { alert(this.name); }; };这里面的this就是c2了
Tick-Tock 2013-05-31
  • 打赏
  • 举报
回复
call了之后,Class2就有了Class1的所有属性和方法,name应该是被覆盖了,参考apply()
  • 打赏
  • 举报
回复
给了c2这个对象,call和apply就是改变this作用域用的。。
        Class1.call(this);
        //==>等价于指向了下面的代码
        /*this.name = "class1"; 
        this.showNum = function () {
            alert(this.name);
        };*/
  • 打赏
  • 举报
回复
Class1.call(this) 把Class2的实例的指针给Class1方法

87,992

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧