为了账号安全,请及时绑定邮箱和手机立即绑定

5-7中关于call用法的不解之处

老师在构造函数Dog中用了一个Pet.call(this,words)来继承Pet构造函数的属性和方法,请问这个Pet.call(this,words)中参数 this和words是什么意思呢

正在回答

3 回答

new一个函数,函数里的this首先指向一个空对象,验证如下:

 function Test() {
     console.log(this);  // Test {}
 }
 
var test = new Test();

也就是说,在代码 Pet.call(this, words); 中,其中的this是一个空对象,这个空对象是Dog对象的一个实例,然后Pet函数被这个原型指向Dog的空对象调用,即此时Pet函数中的this指向这个空对象,为这个空对象添加了一个words属性和一个speak方法,然后将这个对象返回并赋值给 dog变量。

0 回复 有任何疑惑可以回复我~
#1

xs_wang

有一处写错了,应该是“”然后Pet函数被这个原型指向Dog.prototype的空对象调用“”
2017-01-15 回复 有任何疑惑可以回复我~
#2

苏子晨

准确的说应该是空的Dog对象(废话,你不添加内容能不空嘛) function Dog() { this.name = 'dog' console.log(this) //Dog { name: 'dog' } } 所以说,是不是空的关系不大,在这个问题中,它指向dog对象
2017-06-16 回复 有任何疑惑可以回复我~

1--- this 是Pet对象本身

2--- words是对象的成员属性  (this.words=words中的第二个words)

3--- 此时的dog可以看做是pet的副本 (他们虽然长得一样,应该是两个不同的个体,就像是两个一样的碗,但两个又都是独立的)

4--- var dog = new Dog('wang')  ++++++ 此时words已经被 wang 覆盖 

        所以当dog.speak()是  打印出 wang

       


0 回复 有任何疑惑可以回复我~
#1

JohnDoe4290627

你的第二点说错了吧,Pet.call(this,words)中的words指的是传入的参数,并不是成员属性,成员属性是指this.words=words中的第一个words。不过你()里说对了
2017-02-22 回复 有任何疑惑可以回复我~

this指向的是Dog,words是Dog的传入值。call或者apply都相当于是借用而已,比如Pet.call(this,words)表示的是this(也就是Dog)借用了Pet的方法,后面的words都是传入的参数而已。http://www.cnblogs.com/fighting_cp/archive/2010/09/20/1831844.html比较详细

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
进击Node.js基础(一)
  • 参与学习       219394    人
  • 解答问题       896    个

本视频教程带你揭开Node.js的面纱,带你走进一个全新世界

进入课程

5-7中关于call用法的不解之处

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信