如何在object和DRY中移动Javascript函数?

如何在object和DRY中移动Javascript函数?,javascript,google-maps,javascript-objects,dom-events,Javascript,Google Maps,Javascript Objects,Dom Events,在下列功能中,重复相同的操作。我想尽可能多地移动到物体上。也许可以直接从按钮初始化对象中的正确方法 HTML: 编辑我得到了预期的功能,添加到工具中: mapListener: null, initFeature: function(type, aspect) { if ( !! this.mapListener) google.maps.event.removeListener(this.mapListener); if (aspect) this[aspect]();

在下列功能中,重复相同的操作。我想尽可能多地移动到物体上。也许可以直接从按钮初始化对象中的正确方法

HTML:

编辑我得到了预期的功能,添加到工具中:

mapListener: null,

initFeature: function(type, aspect) {
    if ( !! this.mapListener) google.maps.event.removeListener(this.mapListener);

    if (aspect) this[aspect]();

    this.mapListener = google.maps.event.addListener(map, 'click', function(e) {
        tools[type](e.latLng);
    });
},
电话:


如果我明白了你想要做的事情,也许有一个构建器函数会有所帮助,像这样的函数应该可以处理你大部分的案例使用

function MakeNew(act1, act2) {

    return function() {

        if ( !! mapListener) google.maps.event.removeListener(mapListener);

        if ( act2 ) tools[act2]();

        mapListener = google.maps.event.addListener(map, 'click', function(e) {
            tools[act1](e.latLng);
        });
    };
};


dropMarker = MakeNew('createMarker');
newPolygon = MakeNew('addPoint', 'createPolygon');
createPolygon = MakeNew('addPoint', 'createPolyline');

如果我明白了你想要做的事情,也许有一个构建器函数会有所帮助,像这样的函数应该可以处理你大部分的案例使用

function MakeNew(act1, act2) {

    return function() {

        if ( !! mapListener) google.maps.event.removeListener(mapListener);

        if ( act2 ) tools[act2]();

        mapListener = google.maps.event.addListener(map, 'click', function(e) {
            tools[act1](e.latLng);
        });
    };
};


dropMarker = MakeNew('createMarker');
newPolygon = MakeNew('addPoint', 'createPolygon');
createPolygon = MakeNew('addPoint', 'createPolyline');

我不能理解你在问什么,我可以。他的所有功能看起来都一样,除了行
工具工具他怎么能把它压缩成一个函数呢?也许你甚至可以把Google的方法作为闭包的引用传递给它——这样你就不需要与字符串和类似数组的对象索引争吵了。这可能会稍微好一点:
createMarker=MakeNew(tools.createMarker)
并通过
act1(e.latLng)
U在js:)中实现了“面向方面编程”Ok看起来不错,但我的意思是,在
tools
对象中,是否可以使单击按钮后选择的初始化函数成为相同
tools
中的其他方法。我不知道我进入了“面向方面的编程”。谢谢。也许你甚至可以将Google的方法作为闭包的引用传递给它,这样你就不需要与字符串和数组状的对象索引争吵了。这可能会更好一些:
createMarker=MakeNew(tools.createMarker);
并通过
act1(e.latLng)调用它
U在js:)中实现了“面向方面编程”Ok看起来不错,但我的意思是在
tools
对象中是否有可能使单击按钮后选择的初始化函数成为相同
tools
中的其他方法。我不知道我进入了“面向方面编程”领域。谢谢。
tools.initFeature(type, aspect);
function MakeNew(act1, act2) {

    return function() {

        if ( !! mapListener) google.maps.event.removeListener(mapListener);

        if ( act2 ) tools[act2]();

        mapListener = google.maps.event.addListener(map, 'click', function(e) {
            tools[act1](e.latLng);
        });
    };
};


dropMarker = MakeNew('createMarker');
newPolygon = MakeNew('addPoint', 'createPolygon');
createPolygon = MakeNew('addPoint', 'createPolyline');