Javascript使用其他脚本中的新键扩展对象

时间:2014-11-25 14:42:18

标签: javascript requirejs javascript-objects

如何使用更多来自其他脚本的键来扩展对象?

所以我需要这个主脚本,在这里我创建一个通用对象,我将在整个项目中使用。

现在我的另一个脚本是创建基本的项目信息,我希望这个信息也包含在这个主要对象中

所以我的要求main.js看起来像这样:

//my main object
var mainObj = mainObj || {};

require.config({
    paths: {
        leaflet: './leaflet-0.7.3',
        bootstrap: './vendors/bootstrap.min',
        projectInfo: './project-info'
    },
    shim: {
        'bootstrap': {
             deps: ['projectInfo'],
             export: 'bootstrap'
         },
    }
});

define(['projectInfo'], function(projectInfo) {

    'use strict';

    mainObj = {

        //HERE I NEED THE PROJECTINFO OBJECTS
        projection: projectInfo.projection,
        version: projectInfo.projection

    };

});

以下是projectInfo的脚本:

(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        define([], factory);
    } else if (typeof exports === 'object') {
        module.exports = factory();
    } else {
        factory( root );
    }
}(this, function () {

    return {

        projection: {
            type: 'EPSG:4326',
            proj4: '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs',
            resolutions: [1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0.5],    
            tilesMap: 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
            tilesSat: 'http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}'

        },
        version: '0.0.1'

    };

}));

这样可行,但不想手动“复制”信息,我宁愿只用一行/一行扩展这个mainObj。

有没有办法在不编写其他脚本的情况下执行此操作?

提前致谢!

1 个答案:

答案 0 :(得分:2)

您可以使用Underscore的extend功能执行此操作:

_.extend(mainObj, projectInfo);

jQuery也有extend功能:

$.extend(mainObj, projectInfo);

而且,正如费利克斯在下面指出的那样,这个功能计划用于ES6 Object.assign

Object.assign(mainObj, projectInfo);