原型:构造函数的一个属性,从构造函数new出来的对象都会继承这个原型,
即原型是所有构造函数创建出来的对象的祖先,这些对象共同拥有原型上的属性和对象
原型也是一个对象
Person.prototype.name = 'sunny'
function Person() {
// this = {
// __proto__: Person.prototype
// }
}
var person = new Person();
Person.prototype.name = 'chrrey';
console.log(person.name) // chrrey
// 引申
var obj = {name: 'a'};
var obj2 = obj;
console.log(obj2.name); // a
obj = {name: 'b'};
console.log(obj2.name); // a
// obj2 = obj 的赋值语句实际上是 指把obj指向的空间地址赋给obj2
// 当obj重新赋值时,也就是obj指向的空间地址变了,但obj2的指向却没变
// 所以打印出来的name属性值不变
// 同理,看如下的代码
Person.prototype.name = 'sunny'
function Person() {
// this = {
// __proto__: Person.prototype
// }
}
var person = new Person();
Person.prototype = {
name: 'chrrey'
};
console.log(person.name); // sunny
Person.prototype = {
name: 'sunny'
}
person.__proto__ = Person.prototype;
Person.prototype = {
name: 'chrrey'
}