原型(构造函数)就是工厂,原型的实例就是工厂按照图纸生成的工具(比如汽车),
原型链(隐式的)就是生成的工具所具有的功能,而功能是工具的属性,
生成什么样的工具是由工厂(构造函数)决定的,图纸是有工厂和客户共同决定的

var carFactory =function(options){  //原型,构造函数 (工厂)

this.name = options.name;  //

this.color = options.color;

this.run  = function(){}; //

this.stop = function(){};

//......

}

//下面是原型的实例,注意,不一定要new,carFactory({name:"法拉利",color:"orange"})本身就是一个实例,
//可以调用对应的属性和方法如run()和stop()等,
//这里的new是一个继承,相当于另外复制了一份,是为了重复利用该工厂,而不是只生产一辆车,专门为该车提供服务,
//关于继承,可以参考:js继承

var car = new carFactory({name:"法拉利",color:"orange"});//实例

car //{...}

//在chrome下,输出一个对象,其中 __proto__即是原型链,是指该对象隐式的含有的一些功能,
//该功能由原型构造函数决定,而所有的原型的祖宗原型是Object,所以所有的对象都有Object的一些默认的属性和方法,如:toString等

以下代码加深理解

2..constructor=== Number // 2的构造者是Number
Number.constructor ===Function//Number 的构造者是Function
Function.constructor===Function //Function的构造者是 Function
Math.constructor=== Object// Math的构造者是Object
({}).constructor===Object// {}的构造者是Object
Object.constructor===Function //Object 的构造者是 Function
2..__proto__=== Number.prototype // 2的构造者是Number
Number.__proto__===Function.prototype //Number 的构造者是Function
Function.__proto__===Function.prototype //Function的构造者是 Function
Math.__proto__=== Object.prototype // Math的构造者是Object
({}).__proto__===Object.prototype // {}的构造者是Object
Object.__proto__===Function.prototype //Object 的构造者是 Function

zone
265 声望10 粉丝