是否可以将以下内容压缩成一个声明?
var foo = function () { return; };
foo.bar = 'baz';
我最接近的是:
var foo = Object.create(function(){return;}, { bar : { value: 'baz' } });
但该功能不会运行。
答案 0 :(得分:3)
您可以使用将属性从一个对象复制到另一个对象并返回已修改对象的函数来执行此操作。这是大多数通用JS库的一个特性,它通常被称为“扩展”。
var foo = _.extend( function () { return; }, { bar: 'baz' } );
var foo = $.extend( function () { return; }, { bar: 'baz' } );
var foo = Object.extend( function () { return; }, { bar: 'baz' } );
var foo = angular.extend( function () { return; }, { bar: 'baz' } );
Ext:
var foo = Ext.apply( function () { return; }, { bar: 'baz' } );
答案 1 :(得分:2)
非常简单:
var foo = Object.defineProperty(function() { }, 'bar', {value: 'baz'});
利用Object.defineProperty
接受函数作为其第一个参数的事实,并返回该对象。
或者如果您碰巧有变量x
:
var foo = (x = function () { }, x.bar = 'baz', x);
我对这个问题的原始答案提出了以下内容,这可能被视为一个单一陈述":
var foo = (function() { var f = function () {} ; f.bar = 'baz'; return f; })();
或者,如果您考虑以下"单一陈述":
for (var foo=function() {}; !foo.bar; foo.bar = 'baz') { }
或者,本着@cookiemonster的精神:
var foo = (foo=function(){}) && (foo.bar = 'baz') && foo;