首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

JS_Object跟Function的区别

2014-04-23 
JS_Object和Function的区别粗看该图,估计你不一定能看明白。不过接下来让我逐行向你解释。最左侧:意思是,有

JS_Object和Function的区别

粗看该图,估计你不一定能看明白。不过接下来让我逐行向你解释。

JS_Object跟Function的区别

  • 最左侧:意思是,有两个对象f1和f2,他们是通过new Foo()出来的。
  • 中间:Foo()就是最左侧用到的Foo()
  • 最右侧:表示,函数Foo()的prototype属性!1、__proto__的虚线:该条线表示通过f1.__proto__可以访问到Foo.prototype,其实两者是等价的。

    先看最左侧的__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的内容。

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

热点排行