Javacript中的函数只有在需要引用到原型时,才具有构造器的特性。而且函数的构造器总是一个标准的,系统内置的Object()构造器的实例,不过该实例创建后constructor属性总是先被赋值为当前函数。函数与构造器并没有明显的区别,唯一的区别是原型prototype是不是一个有意义的值。
JavaScript中的对象实例本质上只是一个指向其原型的,并持有一个属性列表(properties)的结构。
原型对象所具有的基本性质:
function/动态语言的方法: toString, toLocaleString, valueof;
function/对象系统:构造 ---> constructor
function/属性: propertyIsEnumberable: 对象系统:属性
hasOwnProperty/function
function/原型: isPrototypeof
构造器Object()所具有的特殊成员 (成员名, 类型, 分类)
call /function
apply/function
caller/function ----> 函数式语言
arguments/object
length/number ---> 动态语言
prototype/object: ---> 对象系统/原型
注意: 构造器和原型是两个不同的东西, 构造器基本可以称作构造函数;原型是复制的实例。
function MyObject() { } function MyObjectEx(){} MyObjectEx.prototype = MyObject(); var objex = new MyObject
MyObjectEx/objex的构造器是MyObjectEx()这个函数,objex的原型是Mybject的一个实例.
这样就形成了内部原型链,其是JavaScript的原型继承机制所需要的,通过constructor/prototype所维护的构造器原型链,一般是用户代码需要回溯时需要的。