js中的prototype和constructor

本文正确性有待商榷,高手路过请不吝指教

1.js中只有对象,包括对象,函数,常量等。

对象不用解释。函数也有属性,常见之一就是prototype。常量也有属性:app

(3).__proto__;//Number {}

2.函数的prototype

函数是一种特殊的对象,它能够直接经过小括号来执行自身代码。函数

函数还有一个特殊的属性prototype,它也是一个对象。spa

prototype对象也有一个特殊的属性constructor,初始的时候它是指向该函数的。prototype

也就是当js解释到function关键字的时候,会建立两个对象,一个是function自己,一个是prototype对象。同时将该函数对象的prototype属性指向prototype,而prototype对象的constructor属性指向该函数对象。code

3.对象的__proto__属性

每一个对象都有一个__proto__属性(低版本的IE中可能没有直接给出吧),该属性十分特殊,由于在调用对象的方法或者访问对象的属性时,js会依次遍历对象自己,该对象的__proto__,该对象的__proto__的__proto__……对象

也就是原型链继承的关键blog

4.new关键字

new 关键字用于经过一个函数建立一个对象。继承

其实它主要完成三个工做原型链

  1. 建立一个对象
  2. 将该对象的__proto__指向函数的prototype
  3. 调用该函数(此时注意函数的做用域是第一步新建的对象)

最后返回该对象便可。能够如下面的代码代替作用域

function New(f,args){var a= {};a.__proto__ = f.prototype;f.apply(a,args);return a;}

 5.js对象关系图

其中:xFunction是自定义的函数,xPrototype是xFunction的原型,xObject=new xFunction()

Object 是JS内置的Object;_prototype_是Object的原型

Empty是全部函数对象的__proto__,是一个特殊的函数,没有prototype,

 但愿你们能够共同探讨,给予指点

相关文章
相关标签/搜索