SOURCE

// 原型
// 函数的prototype属性是一个对象
// 为什么构造函数的对象会继承自构造函数的prototype属性呢?
// 因为在构造函数new 的时候, 构造函数第一部会隐式的在内部声明一个
// this的对象, 对象的内部会有一个__proto__的属性,他指向的是构造函数
// 的prototype对象


// 通俗的说就是 __proto__的指向就是我们的构造函数对象需要继承的原型


Car.prototype.lang = '4900';
function Car(name) {
    // 隐式操作,浏览器的内部
    //  var this = {__proto__: Car.prototype}

    this.name = name;

    // return this
}
var car = new Car('BMW');
console.log(car.lang, '继承自原型');





// 练习题:
Car.prototype.lang = '4900';
function Car(name) {
    // var this = {__proto__: Car.prototype}
    this.name = name;
}
var car = new Car('BMW');

Car.prototype = {lang: '5000'};

console.log(car.lang);  // 4900
/**
 * 首先 new 构造函数, 内部创建了this,定义了__proto__的指向是Car.prototype
 * 然后Car.prototype={lang:5000}改变了指向,但是我们的对象继承是__proto__指向
 * 的对象并没有更换指向,还是以前的那个房间指向
 */


Car.prototype.lang = '4900';
function Car(name) {
    // var this = {__proto__: Car.prototype}
    this.name = name;
}

Car.prototype = {lang: '5000'};
var car = new Car('BMW');
console.log(car.lang);  // 5000


/**
 * 首先将这个Car.prototype的房间指向改变成{lang: 5000}
 * 然后声明了new,这个时候内部生成了this隐式的指向,变成了改变地址之后
 * 的对象
 * **/
console 命令行工具 X clear

                    
>
console