执行以下程序,输出结果为()
function Person(age){
this.age = age;
}
Person.prototype = {
constructor:Person,
getAge:function(){
console.log(this.age);
},
}
var ldh = new Person(24);
Person.prototype.age = 18;
Object.prototype.age = 20;
ldh.getAge();
24
对象在调用方法和属性时依靠原型链的顺序进行查找,先从自身查找,然后是构造函数的原型对象,接着是Object的原型对象,一旦找到时停止查找,找不到则返回undefined。
同时,原型对象中的this仍然指向实例对象,而非原型对象,
在本题中,实例对象先调用原型对象的getAge()方法,然后输出age属性值,由于该实例对象已经有age属性,同时其原型链中,原型对象和原型对象的原型对象即Object对象均有age属性,依据上述查找规则,最终输出结果为实例对象的age,即为24。
function Person(age) {
this.age = age;
}
Person.prototype = {
constructor: Person,
getAge: function () {
console.log(this.age);
},
}
var ldh = new Person(24); //ldh = { age: 24 }
Person.prototype.age = 18;
// Person.prototype = {
// age: 18 ,
// getAge: function () {
// console.log(this.age);
// },
//}
Object.prototype.age = 20; // Object.prototype = { age: 20 }
ldh.getAge(); //ldh这个对象上没有getAge方法,就去构造函数的原型上找
//继承构造函数的原型上的getAge这个方法,this指向的是实例化对象ldh