JavaScript一直强调没有类的概念,可是JavaScript中咱们也常常须要new一个对象。函数
new是一个运算符,用来调用函数(js中函数能够做为普通函数被调用作方法,也能够经过new来调用做为一个构造器)this
function Person(name){ this.name = name } let p = new Person('Jay')
其实,在JavaScript中任何对象经过构造器(例如Person)的建立。其实是克隆了一个Object.prototype空对象(js根对象)。spa
克隆一个Object.prototype对象后,初始化将新对象的原型指向Object.prototype。prototype
事实上,除了根对象Object.prototype。任何一个对象都有一个原型。code
像下面这样常见的建立对象方式,在JavaScript引擎内部,都是进行一样的操做 —— 克隆对象
let obj1 = {} let obj2 = new Object()
那么在原型链中的操做:blog
let sport = { category: 'ball' } function Tennis(){} Tennis.prototype = sport let t = new Tennis()
主要步骤有两点:ip
最后补充一点,构造器函数中有两句语句被隐式执行了,上面的Tennis中原型链
function Tennis(){ let this = { __proto__: Tennis.prototype } // ..... // let this.xxx = xxx // ..... return this }