原型链
// 属性查找规则
function Student(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
Student.prototype.sayHi = function () {
console.log('大家好,我是' + this.name);
}
// 构造函数的原型对象增加一个属性
Student.prototype.test = 'abc';
var s1 = new Student('lilei', 18, '男');
var s2 = new Student('hmm', 18, '女');
// 如何访问对象的方法
// s1对象的原型对象的原型对象 Object构造函数的原型对象
// console.log(s1.__proto__.__proto__ === Object.prototype);
//
// 所有的对象都有toString()方法
// 查找toString() 根据对象的查找原则所有的对象都可以查找到Obect 上的所有成员
// console.log(s1.toString());
// console.dir(s1);
// console.dir(s1.__proto__);
// console.dir(s1.__proto__.__proto__);
// 如何访问对象的属性
// 读取属性 先在对象本身查找test属性,如果没有找到的话,会去原型链上查找
// console.log(s1.name);
// console.log(s1.test);
// 设置属性
s1.name = 'xxx';
// test属性在原型对象上,而在设置属性的值的时候,不会搜索原型链
// 而是直接给对象新增一个test属性
s1.test = '123xxx';
console.log(s1.name);
console.log(s1.test);
console.log(s2.name);
console.log(s2.test);