捡起JavaScript(2)

如何在JavaScript中使用面向对象思想

在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方法。对象

ok!如今我在草稿纸上画一下ABC和ABC.prototype之间的关系。

你会问这个有什么用?咱们先抛开这个问题,引入一个问题在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

这里有个问题,为何变量 var abc会调用到ABC的name和say属性?这就是下一节来补充的。

相关文章
相关标签/搜索