分享一道原型的题目

Posted sss大辉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分享一道原型的题目相关的知识,希望对你有一定的参考价值。

function P() {}
var p1 = new P();
P.prototype.age = 18;
P.prototype = {
    constructor: P,
    name: ‘zz‘
}
P.prototype.num = 20;
P.prototype.age = 22;
console.log(p1.name);
console.log(p1.age, ‘dd‘);
console.log(p1.num);
var p2 = new P();
console.log(p2.name);
console.log(p2.num);
console.log(p2.age);

里面依次输出为:
undefined;18,‘dd‘;undefined;zz;20;22
分析:
这里主要考察的是,实例到是跟哪个原型对象有委托关系的;
首先p1是跟原P的原型对象有委托关系,即他会有age;
但是后面P重写了原型,P.prorotype会创建一个新的原型对象,而p1.__proto__仍然指向原来的那个旧的原型对象;
所以p1的name,num都是undefind,他是指向旧的原型链,而旧的原型链上没有这些属性。
p2实例化的时候,原型已经重写了,p2.__proto__指向新的原型对象,会有重写之后的属性,如name,num,新age;
即可以通过原型链上看

console.log(p1.__proto__ === P.prototype); //false

console.log(p2.__proto__ === P.prototype); //true

以上是关于分享一道原型的题目的主要内容,如果未能解决你的问题,请参考以下文章

js原型链的一些发现----来自一道笔试题

一道面试题目

javascript基础修炼——一道十面埋伏的原型链面试题

javascript基础修炼——一道十面埋伏的原型链面试题

一道原型上封装的面试题

一道原型上封装的面试题