如何在object和DRY中移动Javascript函数?
在下列功能中,重复相同的操作。我想尽可能多地移动到物体上。也许可以直接从按钮初始化对象中的正确方法 HTML: 编辑我得到了预期的功能,添加到工具中:如何在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]();
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');