JavaScript原型

凡是通过 new Function() 创建的对象都是函数对象,其他的都是普通对象。f1,f2,归根结底都是通过 new Function()的方式进行创建的。Function Object 也都是通过 New Function()创建的。

function f1(){}; 
var f2 = function(){};
var f3 = new Function('str','console.log(str)');

实例的构造函数属性(constructor)指向构造函数

每个函数对象都有一个prototype 属性,这个属性指向函数的原型对象

原型对象(Person.prototype)是 构造函数(Person)的一个实例

所有的原型对象都会自动获得一个 constructor(构造函数)属性,这个属性(是一个指针)指向 prototype 属性所在的函数(Person)

JS 在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做proto 的内置属性,用于指向创建它的构造函数的原型对象。

Person.prototype.constructor == Person;
person1.__proto__ == Person.prototype;
person1.constructor == Person;
Object.prototype.__proto__ === null

所有函数对象的proto都指向Function.prototype,它是一个空函数(Empty function)

用对象直接量方式定义的对象其构造器(constructor)指向的是根构造器Object

Person.prototype = {
    getName: function() {}
}
Person.prototype.constructor = Object.constructor = 
ƒ Object() { [native code] }
JSRUN notes