构造函数中的对象字面量

object literals inside constructor

我正在为 JavaScript 中的元素创建定义一个简单的 shorthand 函数。目前,我有:

 //simple creation function
function make(tag, style, id) {
    var obj = document.createElement(tag);
    if (style !== '' ) {
        obj.style.cssText = style;
    }
    if (id !== undefined) {
        obj.setAttribute('id',id);
    }
    return obj;
}

而且你称呼它很简单:

var myDiv = make('div','float:right','myDiv');

但我真正想做的是定义一个具有更多可选属性的函数,类似于 jQuery 的创建函数,例如:

var $myDiv = $('<div>', {id: 'myDiv', style: 'float:right'});

如何将对象文字设置为 make() 的参数之一并在函数中调用它的值?

Javascript 对您如何设置函数参数没有任何限制。只需在参数列表中随意调用对象文字并将其传入即可。

function make(tag, config) {
    var obj = document.createElement(tag);
    if (config.style !== '') {
        obj.style.cssText = config.style;
    }
    if (config.id) {
        obj.setAttribute('id', config.id);
    }
    return obj;
}

并这样称呼它:

var myDiv = make('div', {style: 'float:right', id: 'myDiv'});

嗯,你可以这样做:

function initializeObjectWithProperties(options){
    var newObject = {id:options.id};
    newObject.prop = options.prop;
    newObject.prop1 = options.prop1;
    newObject.style = options.style;
    return newObject;
}
initializeObjectWithProperties({id:0,prop:1,prop1:2,style:"MYSTYLE"})//returns newObject with all the properties and their corresponding values.

或不安全

function initializeObjectWithProperties(options){
    var newObject = {}; //this could be an HTML object as well.
    for (var i in options){
        if (newObject[i] == undefined){
            newObject[i] = options[i]; //
        }
    }
    return newObject;//returns new object with all of option's properties
}
initializeObjectWithProperties({id:0,prop:1,prop2:2,anyRandomProp:"myRandomPropertyValue"});

尽管此方法不安全,因为它还循环遍历 Object 原型,但此方法循环遍历对象的所有属性。您可以使用这两种方法将属性添加到另一个对象。 Javascript的对象几乎可以存储任何东西。