function Hero(name,weapon,equipment,blood){
this.name=name;
this.weapon=weapon;
this.equipment=equipment;
this.blood=blood;
}
Hero.prototype.attack=function(){
console.log(this.name+':攻击');
}
//通过Hero的构造函数创建的对象,可以访问Hero.prototype中的成员
var hero1=new Hero('li忠','弓箭',['头盔','鞋子'],100);
var hero2=new Hero('刘备','弓箭',['头盔','鞋子'],100);
hero1.attack();
hero2.attack();
console.log(hero1.attack()===hero2.attack()); //判断hero1中的attack方法与hero2中的attack方法在内存中是否占得同一块空间
console.dir(hero2); //查看对象的内容
//由原型链可知,当调用对象的属性或方法的时候,先去找对象本身的属性/方法,如果对象没有该属性或者方法,此时去找该构造函数的原型中是否有此属性/方法,
//如果没有该属性,则去找Object原型对象中是否存在,如果没有,则去null中去查找,如果还是没有,会报错
//hero1.__proto__ : 对象的__proto__等于构造函数的Student.prototype
//__proto__属性是非标准属性。作用:作为对象的属性去指向构造函数的prototype,以此来让对象可以访问原型中的成员/方法
//在原型中有一个属性 constructor 构造函数
//constructor 作用: 记录了创建该对象的构造函数
console.log(hero2.constructor);
var arr=[]; //数组本身也是一个对象,对象就有constructor属性
console.log(arr.constructor); //可以看出数组的默认构造函数是Array
JavaScript的原型链
最新推荐文章于 2024-10-11 17:39:47 发布