JS_Object和Function的区别
粗看该图,估计你不一定能看明白。不过接下来让我逐行向你解释。
先看最左侧的__proto__虚线,表示Foo.__proto__相当于Function.prototype,这里和Object情况差不多,只是属性一致而已,并不是指真正的那个Function
中间的下部的__proto__虚线,代表Function.__proto__等于Function.prototype,这里可是真的就是,和前面的相当于不同。
??
?对于prototype来说,它是针对对象的,也就是Function是无法使用的,只有new出来的才能有效
?
Object.__proto__.test4extend="123";//扩展Object的原型 ?alert("Function:"+Function.test4extend);//在Function中出现了test4extend属性?alert("Object:"+Object.test4extend);//在Object中出现了test4extend属性,此时Object还是个Function?var obj=new Object;alert("Object instance:"+obj.test4extend);//未定义?function Foo(){?}?var foo = new Foo;alert("foo object:"+foo.test4extend);//未定义?alert("Function:"+Foo.test4extend);//函数上也扩展上了test4extend属性??【总结】
Function扩展自Object,但是Function对Object又有影响,这是通过Object.__proto__就是(===)Function.prototype建立的联系。记住这个联系后,我们还要记住__proto__和prototype的区别,前者扩展的只可以被Function直接调用,后者扩展的只可以通过其实例调用。另外,还要注意__proto__和prototype的链的概念,这是因为,他们可以互相关联,访问到Function或Ojbect的内容。?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?