JS中的连接函数

时间:2016-12-12 11:49:28

标签: javascript ecmascript-6

我想创建一个实用程序对象/函数size,它给出一个dom元素myDom并调用另一个函数bigsmall来改变内联样式myDom

目前我对实际将myDom传递给函数bigsmall的解决方案感兴趣,因此可以进行内联样式修改。

我想知道哪种JS模式可以帮助我实现这个结果和一个简短的例子。

window.size(myDom).big();

window.size(myDom).small();

4 个答案:

答案 0 :(得分:2)

您可以使用bigsmall方法返回对象,并使用闭包来访问myDom:

function size(myDom) {
    return {
        big: () => { myDom.style.... }
        small: () => { .... }
    };
}

或者您可以创建带有myDom的类作为构造函数参数(将其存储在字段中)和适当的方法。

答案 1 :(得分:2)

如果要使用ES6类,可以返回包含元素的类的实例:

class Sizeable {
    constructor(el) {
        this.el = el;
    }

    big() {
        // do something with this.el
    }

    small() {
        // do something with this.el
    }
}

window.size = function(el) {
    return new Sizeable(el);
};

当然,这大致相当于:

function Sizeable(el) {
    this.el = el;
}

Sizeable.prototype.big = function() {
    // do something with this.el
}

Sizeable.prototype.small = function() {
    // do something with this.el
}

window.size = function(el) {
    return new Sizeable(el);
};

答案 2 :(得分:0)

size方法必须将一个对象作为其返回值。

该对象必须包含名为bigsmall的属性。

它还应该包含您想要提供给

的任何其他数据(存储在其他属性中)

每个属性的值必须是函数

这些函数可以从创建它们的函数中读取变量(作为闭包),也可以使用this关键字从对象中读取数据(您需要将该数据存储在其他属性中)

答案 3 :(得分:-1)

这意味着您的myDom对象需要使用bigsmall方法进行扩展,size()必须返回myDom对象。

如果你不能轻易调整myDom对象,那么愚蠢的方法就是动态分配函数:

function big() {
    //code
}

function small() {
    //code
}

稍后在代码中的某处:

myDom.big = big;
myDom.small = small;

但通常你的size()必须只返回myDom:

return myDom; 

和myDom必须将big()和small()方法定义为其中的一部分。