在ES6标准出现以前,全部想在JavaScript中使用面向对象思想来定义变量,惟一的途经就是使用new XXX(),其中XXX是一个方法名。例如:javascript
function ABC() {} var abc = new ABC()
有的小伙伴会想:咦?我明明能够使用的是var obj = {}来声明一个对象变量啊,怎么能说new 方法名是惟一途经呢?java
其实JS提供了一个语法糖,var obj = {} 和 var abc = new Object()是一个意思。同时,说明了一个问题Object是一个方法名。经过以下的代码,证实了咱们的猜测。this
Object instanceof Function // true
好了,咱们再次回来,咱们定义了一个方法ABC,那么JS帮咱们对这个ABC作了哪些操做了?
prototype
能够很显然地发现JS内核对方法ABC添加了不少属性,其中最重要的就是prototype,它也是一个对象。code
咱们发现ABC.prototype中有constructor属性就是以前声明的ABC方法。对象
你会问这个有什么用?咱们先抛开这个问题,引入一个问题在JavaScript面向对象思想里,如何定义变量和方法?blog
function ABC() { this.name = 'hello', this.say = function() { console.log('ABC say... ') } } var abc = new ABC() ------ console.log(abc.name) // hello abc.say() // ABC say...
若是你回答结束,我会问还有呢?ip
function ABC() {} ABC.prototype .name = 'hello' ABC.prototype.say = () => { console.log('ABC say... ')} ------ console.log(abc.name) // hello abc.say() // ABC say...
咱们发现这是两个相同的结果。经过这个例子就能够发现方法ABC的prototype的做用。io
用于来补充扩展以前定义的类,即定义的方法。console