先看官方解释
new
运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。
构造函数
function Employee() { this.name = ""; this.dept = "general"; } var employee = new Employee(); console.log(employee);
构造函数生成对象,没有问题,虽然这是个怪异对象,但是也是对象,没有问题。
问题在于继承的时候用了call 之后
function Manager() { Employee.call(this); } var manager = new Manager(); console.log(manager);
虽然这是个经典集成方法,但是manager 中没有name和dept属性呀,他们是怎么出现的呢?原理是啥?是call么来看看call 的作用
call()
方法使用一个指定的 this
值和单独给出的一个或多个参数来调用一个函数。
call 只是把this的指向改变了呀,没说会给原来的对象添加属性呀,你怎么还加戏把改变了this之后的对象的属性给加到实例上来了呢????????
只能推测new 会复制this中绑定的属性,因为call 把Employee 方法中this指向Manager了,那么就相当于执行了
Manage.name="";
manage.dept="general;
所以
function Employee() { this.name = ""; this.dept = "general"; } function Manager() { Employee.call(this); } // 完全等于 function Manager() { this.name = ""; this.dept = "general"; }
所以这个就是call 继承的真相,这就是call的作用!!!!!