这段JavaScript代码中this为什么指向window?

求解,并且可以简要说说apply是怎么运行的吗... 求解,并且可以简要说说apply是怎么运行的吗 展开
 我来答
思绪無痕
推荐于2016-08-17 · TA获得超过1016个赞
知道小有建树答主
回答量:415
采纳率:57%
帮助的人:328万
展开全部
//这种普通的函数不足以体现this关键字
function Person(_name){
 this.name = _name;
 this.say = function(){
     return 'my name is'+this.name;
 }
}
var p = new Person('zhangsan');
p.name;//张三
p.say();//my name is zhangsan
//不new
var p = Person('lisi');//
p;//undefined 当然是undefined 因为没用new 关键字开辟一个新对象,
 只是普通的运行了Person这个方法,因此p没有在内存中指向任何对象的实例
//但是 运行了 ,那么name 和 say 去了哪
window.name;//lisi
window.say();//my name is lisi
//总结 
当使用new 关键字时候,this 指向的是当前开辟的这个对象实例,因此外部用一个变量引用它,就可以使用这个新对象实例
当不使用new,this就是指向window 。但是对于dom事件中,需要另外理解了。
//关于call 和 apply 区别在于传参数的方式,call必须一个个传,apply是穿数组,因此可以直接使用arguments 
就利用上面的Person,我们建立一个Child
function Child(name,age){
 this.age = age;
 Person.call(this,name);
 //或者 Person.apply(this,[name]);
}
//使用
var c = new Child('chiid',23);
c.name;//child
c.age;//23
c.say();
//此时Child中的this,当然是new的时候那个Child的实例,也就是被var c 引用的,
 然后利用 Person.call/apply 将当前this 对象传递给Person,使得Person中的this指向了本次Child的实例--—>c ,因此 Child 利用这样的方式继承了Person的name和say方法
//不懂很正常的,这个要从内部实现-->内存上去理解。
更多追问追答
追问
亲,,我还是不懂,有些乱。就apply和call不懂
他们的区别我懂...但是怎么运行的我真心不懂
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式