js中的原型链 prototype 与__proto__

时间:2021-01-04 19:38:52
function Person(){

}
Person.prototype.name
= 'aaa';
Person.prototype.age
= '12';
Person.prototype.class
= '9';
Person.prototype.sayName
= function(){
alert(
this.name);
};
var person1=new Person();
//person1.sayName();
//
alert(Person.prototype.constructor);//指向构造函数
//
alert(person1.__proto__==Person.prototype);//创建的实例包含__proto__属性,并且指向构造函数的原型;

//当访问对象 person1.father的时候,因为没有实例上没有这个属性,会通过实例的__proto__寻找到构造函数的原型;


// 继承:function Teacher(){}
// Teacher.prototype = new Person();
// Teacher.prototype.constructor = Teacher;
//如果构造函数的原型上没有,就会向继承的父类寻找,如果继承是通过上面的方法实现的,就会寻找到父类的构造函数的prototype
// 直到 Object 的原型

person1.name='bbb';//掩盖掉原型的同名属性;
alert(person1.name);
/*delete person1.name;//删除实例属性之后,找到原型的属性,并且在实例中无法删除原型中的属性;
alert(person1.name);
*/
alert(person1.hasOwnProperty(
'name'));//确定实例中是否有这个属性;返回true / false
alert('name' in person1);// 确定原型中是否有这个属性;