用对象键在一行中声明和分配函数对象

Declaring and assigning a function object with object keys in one line

本文关键字:对象 声明 分配 函数 一行      更新时间:2023-09-26

是否可以将下面的语句压缩成一条语句?

var foo = function () { return; };
foo.bar = 'baz';

最接近的一次是:

var foo = Object.create(function(){return;}, { bar : { value: 'baz' } });

您可以使用一个函数来完成此操作,该函数将属性从一个对象复制到另一个对象并返回修改后的对象。这是大多数通用JS库的一个特性,它通常被称为"extend"。

强调:

var foo =       _.extend( function () { return; }, { bar: 'baz' } );
jQuery:

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' } );

相当简单:

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;