原型和原型链测试题

代码片段里的解释都是我自己理解的原型链,如果有人觉得哪里不对可以在评论里直接指出,我们一起讨论哈!

测试题1

    function A(){

    }
    A.prototype.n = 1
    var b = new A()
    
     //这一步修改了A.prototype的地址值,改变了A.prototype的指向 
    A.prototype = {
        n:2,
        m:3
    }
     //实例对象c的指向和此时改变后的A.prototype的指向一致
    var c = new A()
     //实例对象b的指向并没有被改变
    console.log(b.n,b.m,c.n,c.m) //1 undefined 2 3
   

测试题2

    var F = function(){}
    Object.prototype.a = function(){
        console.log('a')
    }
    Function.prototype.b = function(){
        console.log('b')
    }
    var f = new F();
    //f是F的实例对象,所以f.__proto__指向F.prototype,同时Funtion.prototype又是一个空的object对象,所以他的__proto__指向了Object.prototype,Object.prototype是原型链的终点
    f.a();//a
    f.b();//f.b is not a function
    
    //F是构造函数,所有的函数都是由Function来new的,所以F的__proto__指向了Funtion.prototype,同时Funtion.prototype又是一个空的object对象,所以他的__proto__指向了Object.prototype
    F.a();//a
    F.b();//b

测试题3

    var foo={}
    F = function(){};
    Object.prototype.a = 'value a'
    Function.prototype.b = 'value b'
    //foo是一个对象,foo.__proto__指向Object.prototype然后结束,找不到Function.prototype
    console.log(foo.a) //value a
    console.log(foo.b) // undefined
    //F是一个函数,是通过new Funtion()得到的,所以F.__proto指向Function.prototype,同时Funtion.prototype又是一个空的object对象,所以他的__proto__指向了Object.prototype
    console.log(F.a) // value a
    console.log(F.b) //value b

测试题4

    function A(){}
    function B(a){
        this.a = a;
    }
    function C(a){
        if(a){
            this.a = a
        }
    }
    A.prototype.a = 1;
    B.prototype.a = 1;
    C.prototype.a = 1;

    console.log(new A().a) //1
    //new B()的时候调用了构造函数,实参没有传相当于只定义了没有赋值,所以a的值为undefined
    console.log(new B().a) //undefined
    console.log(new C(2).a) //2

测试题5

//123['toString'] 此时 123是一个捅过new Number创造的对象
//所以123.__proto__的指向和Number.prototype的指向一致
//123['toString']相当于查找Number.prototype中的toString属性
//toString中有一个length属性值为1
console.log(123['toString'].length+123) //124
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值