灵活的javascript
假如有如下的校验表单方法:
1 | function checkName(){ |
这样的声明可能会和别人写的冲突,我们可以把他们放在一个变量中,这样可以减少覆盖或者被覆盖的风险:
1 | var CheckObject = { |
使用对象实现:
1 | var CheckObject = function(){}; |
这样别人就可以基于你的对象进行扩展。这样创建实例对象时,创建出来的对象所拥有的方法就只有一个。
1 | var a = new CheckObject(); |
这样有个问题,每次都要书写a
对象,我们可以通过每个方法后面返回对象来支持链式调用:
1 | var CheckObject = function(){}; |
这样就可以通过a.checkName().checkEmail().checkPassword()
来链式调用。
写的都是看到的
创建一个类
1 | var Book = function(id, bookname, price){ |
使用类:
1 | var book = new Book(10, 'javascript begin', 120); |
constructor
constructor是一个属性,当创建一个函数或者对象时都会为其创建一个原型对象prototype,在prototype对象中又会创建一个constructor属性,那么constructor属性指向的就是拥有整个原型对象的函数或对象。
私有属性、私有方法、特权方法等
1 | var Book = function(id, name, price){ |
有时候我们经常将类的静态变量通过闭包来实现:
1 | var Book = (function(){ |
闭包是有权访问另一个函数作用域中变量的函数,即在一个函数内部创建另一个函数。
继承
1 | function SuperClass(){ |
另一种方式:
1 | function SuperClass(){ |
组合继承:
1 |
|
洁净的继承者-原型式继承:
1 | function inheritObject(o){ |