总结面向对象模式遇到的问题
1.为何对象实例person1和person2都有一个constructor属性,
function Person(){}
var person1 = new Person();
var person2 = new Person();
console.log(person1.constructor == Person); //true
console.log(person2.constructor == Person); //true
这是因为实例可以共享原型对象的属性和方法,constructor也不例外。
2.为什么寄生构造函数和稳妥构造函数创建的对象和构造函数没有任何关系呢?
3.如何理解下面这句话?
关于寄生构造函数模式,有一点需要说明:首先返回的对象与构造函数或者与构造函数原型的属性之间没有任何关系,也就是说,构造函数返回的对象与构造函数外部创建的对象没有什么不同的。
function Person(name,age){
var obj = new Object();
obj.name = name;
obj.age = age;
return obj;
}
var person1 = new Person();
因为new Person创建的对象和里面new Object()是两个对象。
return obj;重写了调用构造函数返回的对象。因此这个对象返回的constructor属性是Object;
person1.constructor == Object;
如果是下面这种写法,person1的constructor属性是Person。
function Person(name,age){
}
var person1 = new Person();
console.log(person1.constructor); //Person
形成了鲜明的对比。