原型对象中的this仍然指向实例对象,而非原型对象

发布时间 2023-11-11 00:52:23作者: 龙陌

执行以下程序,输出结果为()

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