"朱哥,C# 和 java 中的构造函数我明白什么意思,可是在 js 中并没有定义构造函数的说明,javascript 中的构造函数到底在哪儿了?" 小白找到老朱问道.
老朱说:"你可以把定义类的时候 function 主体都看作是它的构造函数,通过 prototype 添加的方法看作是类的公共方法,这样就好理解了.你看下面这个类."
小白看了一下说道:"上面 Obj1 的 function 主体就是构造函数吧!它里面的 getName 方法属于构造函数中的方法.后面通过 prototype 添加的 showName 就不属于构造函数了."
老朱:"恩!分析的不错!你听过 javascript 中的 call 方法么?"
小白:"以前看别人做 flash 的时候,把 flash 中的函数与 js 中函数进行通信的时候会用到 call 方法.不过我没有用过!"
老朱:"对!就是那个 call 方法.这个方法是让当前对象的构造函数与另一个对象构造函数进行融合.比如我新创建一个对象,在新对象的构造函数中使用 call 方法."
"通过这种模式 Obj2 对象就可以把 Obj1 的构造函数全部继承过来.虽然 Obj2 里面没有定义 name 属性和 getName 方法,我们实例化 Obj2 以后却可以使用它们."
"构造函数里面的变量 name 和方法 getName 都可以使用,但是 showName 我们是通过 prototype 原型添加的,所以就无法使用了!"
小白说:"那怎样才能又继承构造函数还能继承 prototype 的方法呢?"
老朱说:"昨天我们说的那个继承还记得吧!昨天通过 prototype 原型继承构造函数有问题,我们把今天这两种组合到一起就完美了啊!你自己试试看!"
小白:"哈哈!可以使用了,两种方式组合后即实现了构造函数继承又实现了公共方法的继承!JS 真是太灵活了."
老朱说道:"还有些其他的继承实现的方法,这里我们先不说了,等你 js 特别熟练以后再看别的继承可能会更容易理解.目前你学到的继承知识已经够用了.另外刚刚我们定义的 Obj2 构造函数中没有设置自己的变量和方法,你也可以自己练习的时候添加上看看."
想学 H5 的朋友可以关注老炉,您的关注是我持续更新《小白 html5 成长之路》的动力!
来源: http://www.jianshu.com/p/48fabda4e747