02 May 2014

为了便于理解,JS的对象可以划分为函数对象和普通对象,每个对象都有一个__proto__属性,用于保存各对象原型的神秘链接,每个函数对象都有一个prototype属性,该属性存储的就是原型对象。

下面看一个函数对象的原型链构:

1
2
3
function Person () {
    this.me="rokety";
}

prototype

实例化:

1
var p = new Person();

prototype

再来看看闭包,跟函数对象差不多:

var f = function(){this.me="rokety";};

prototype

JS 中 new 运算符工作原理,JavaScript原型继承工作原理

function New (f) {
    var n = { '__proto__': f.prototype  }; /*第一步*/
    return function () {
        f.apply(n, arguments);            /*第二步*/
        return n;                         /*第三步*/
    };
}

JS 引擎如何查找属性:

function getProperty(obj, prop) {
    if (obj.hasOwnProperty(prop))
        return obj[prop];
    else if (obj.__proto__ !== null)
        return getProperty(obj.__proto__, prop);
    else
        return undefined;
}