Javascript中原型链练习题及解析

2,262 阅读1分钟

习题一

function C1(name) {
        if (name) {
            this.name = name;
        }
    }

function C2(name) {
        this.name = name;
    }

function C3(name) {
        this.name = name || 'join';
    }
C1.prototype.name = 'Tom';
C2.prototype.name = 'Tom';
C3.prototype.name = 'Tom';
alert((new C1().name) + (new C2().name) + (new C3().name));

解析:

习题二

 function Fn(num) {
        this.x = this.y = num;
    }
    Fn.prototype = {
        x: 20,
        sum: function () {
            console.log(this.x + this.y);
        }
    };
    let f = new Fn(10);
    console.log(f.sum === Fn.prototype.sum);
    f.sum();
    Fn.prototype.sum();
    console.log(f.constructor);

解析:

习题三

  function Fn() {
        this.x = 100;
        this.y = 200;
        this.getX = function () {
            console.log(this.x);
        }
    }
    Fn.prototype = {
        y: 400,
        getX: function () {
            console.log(this.x);
        },
        getY: function () {
            console.log(this.y);
        },
        sum: function () {
            console.log(this.x + this.y);
        }
    };
    var f1 = new Fn;
    var f2 = new Fn;
    console.log(f1.getX === f2.getX);
    console.log(f1.getY === f2.getY);
    console.log(f1.__proto__.getY === Fn.prototype.getY);
    console.log(f1.__proto__.getX === f2.getX);
    console.log(f1.getX === Fn.prototype.getX); 
    console.log(Fn.prototype.__proto__.constructor);
  

解析

习题四

var print=function(){alert(1);}
function Fn() {
    print=function(){alert(2);}
    return this;
}
function print(){alert(3);}
Fn.prototype.print=function(){alert(4);}
Fn.print=function(){alert(5);}

print();
Fn.print();
Fn().print();
new Fn.print();
new Fn().print();

解析