autojs模块链式调用

JavaScript09

autojs模块链式调用,第1张

在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()

function Person(){

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')