原型 与 new 方法

174 阅读1分钟

原型

var o1 = {name: 'o1'};
var o2 = new Object({name: 'o2'});
var M = function(name) {this.name = name};
var o3 = new M('o3');
var o4 = Object.create({name: 'o4'})

M.prototype.say = function() {
    console.log('say hi');
}

var o5 = new M();

var p = {name: 'o6'};
var o7 = Object.create(p);

new 方法 使用 Object.create
function new2(M) {
    let o = Object.create(M.prototype);
    let r = M.call(o);
    if (typeof r === 'object') {
        return r;
    }
    return o;
}

new 方法,改变原型链

function new3(M) {
    let o = {};
    o.__proto__ = Object.create(M.prototype);
    let r = M.call(o);
    if (typeof r === 'object') {
        return r;
    }
    return o;
}