this.type = 'person'
this.say =function(msg){
console.log('person say:'+msg)
return this // 这行是关键,需要返回此实例对象,因此执行此方法后返回实例对象,所以可以直接调用实例对象上的方法,即为链式效应
}
}
var p = new Person()
//链式调用
p.say('hello').say('world').say('so easy')
在auto就是中使用控件的时候是通过链式调用的,就像这样
id("recent_chat_list").className("AbsListView").findOne().scrollForward()
js的链式调用并不复杂,就是每次执行完返回this对象,这样后面的方法就可以继续在this环境下执行。
先创建一个简单的模块
var P = function () {
function Person() { }
return Person
}()
module.exports = P
给它添加两个get、set方法
Person.prototype = {
setName: function (name) {
this.name= name
return this
}, setAge: function (age) {
this.age = age
return this
},getName:function(){
return this.name
},getAge:function(){
return this.age
}
}
再加init一个方法,返回一个Person对象,
Person.by = function () {
return new Person
}
如果在模块里,new一个对象就会在require模块的时候初始化,导致混淆,所以写个方法,手动new一个对象。
调用的方法是
var p = require("p.js")
p.init().setAge(10).setName("小明").getName()
p.init().setAge(20).setName("老王").getAge()
就是这么简单。
//如果我定义如下一个对象var a = {
fun1 : function(){
console.log("fun1")
return a
},
fun2 : function(){
console.log("fun2")
return a
},
fun3 : function(){
console.log("fun3")
return a
}
}
那么,我调用的时候就可以链式调用了
a.fun1().fun2().fun3()