对象
红色虚线表示隐式原型链。这个对象模型图东西太多,很多地方需要仔细理解,可以写一些测试代码来验证。如果你彻底理解了这张图,你几乎就会知道JavaScript语言了。以下是一些补充说明: 1。图中有几个对内置Function构造函数的引用,是同一个对象,可以测试验证。的复制代码如下://传入FF 2.0,IE7,Opera 9.25,safari 3 . 0 . 4 Function==Function . constructor//result : true Function==Function . prototype . constructor//result : true Function==object . constructor//result : true//Function也等于Number.constructor,String.constructor,Array.constructor,Regexp。构造函数等。function fn () {} function==fn。构造函数//result :这说明了几个问题。函数指向内置函数构造函数);系统的;该函数已引导;系统中的所有函数都是按函数构造的。2.obj1、obj2.左下角的objn指的是用这样的代码创建的object :函数fn1(){ };var obj 1=new fn1();这些对象没有局部构造函数方法,但是它们会从Prototype链中得到一个继承的构造函数方法,即fn.prototype.constructor从函数对象的构造过程中,我们可以知道它就是fn本身。3.obj1、obj2.右下角的objn指的是用这样的代码创建的对象: var obj 1=new Object();或者var obj 1={ };或var obj1=新数字(123);或者obj 1=/ w/;等等。因此,这些对象的原型链的指向和从原型链继承的构造函数的值(即它们的构造函数是内置的Number构造函数还是内置的Object构造函数等。)取决于具体的对象类型。此外,注意到var obj=新对象(123);这样创建的对象类型仍然是Number,也需要根据参数值的类型来确定。它们也没有本地构造函数,而是从Prototype链中获取继承的构造函数方法,即内置的***构造函数,由数据类型决定。示例代码复制代码如下: //自定义对象代表,对应于Javascript Object Model中使用已定义函数foo(){ }//自定义对象创建的对象实例的代表。在相应的Javascript对象模型中,由用户定义函数var foo=new foo()创建的对象;//String内置函数代表//str代表为内置函数创建的对象实例,对应于Javascript Object Model中内置构造函数var str=new string ('string ')创建的对象;记忆展示
你会发现和《理解Javascript_09_Function与Object》中的内存分析图是一样的。为什么呢?如《数据模型》中所述,所有内置对象都可以视为函数的派生类型,例如,Function的Number instance为真,Object的Number instance为真。从这个意义上说,它们可以被视为用户定义的函数。因此,内置对象和自定义对象的创建过程是相同的。博文是在理解《Function与Object》的基础上写的,所以要理解这篇文章,就要理解Function和Object的关系!写最后一篇演讲:令人抓狂的理论!