是否可以将一个对象扩展为“;一个函数
Is it possible to extend an object "into" a function?
我一直觉得在JavaScript中可以将函数扩展为对象很有趣:
var order = function(x, y) {
return x < y ? [x, y] : [y, x];
};
order.backwards = function(x, y) {
return order(x, y).reverse();
};
我不会说有太多理由这样做(但话说回来,为什么不呢?);我的问题很简单,是否有可能相反。也就是说,我可以输入如下内容:
var order = {
backwards: function(x, y) {
return order(x, y).reverse();
}
};
// Obviously, this is not real; I'm just wondering if there's any way
// to accomplish the same thing.
addFunctionBehavior(order, function(x, y) {
return x < y ? [x, y] : [y, x];
};
你不能。你所能做的就是接受一个对象并返回一个函数。
记住函数也是对象,除了它们继承自Function.prototype
而不是Object.prototype
它们也有一个内部的[[Call]]
属性,当它们被调用时被调用。你不能扩展一个对象并赋予它[[Call]]
属性。
然而,你可以使用ES6代理(它是非标准的,浏览器支持一般)做一些非常类似的事情。
如果您为属性提供一个名称,您可以这样做:
addFunctionBehavior(order, 'reverse', function(x, y) {
return x < y ? [x, y] : [y, x];
};
给定:
function addFunctionBehavior(o, name, fn) {
o[name] = fn;
}
但是我不知道为什么我要这样做,而不是:
order.reverse = function (x,y) { ... }
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 我可以在json对象中添加一个函数吗
- Javascript使函数一个接一个地执行
- 是JavaScript中的函数一个对象
- 两个几乎相等的jQuery函数;一个适用于IE,一个不适用于IE
- 两个Javascript函数一个window.onload=Custom.init;和一个window.onload=f
- 使javascript加载函数一个接一个地执行
- 如何通过两个嵌套的匿名函数(一个带有超时的事件处理程序)传递变量
- 为什么我不能让两个jQuery函数一个在另一个里面呢?
- 给函数一个变量名,而不是它的值
- 如何使用嵌入函数(一个滚动页由Pete - peachananr)
- 是否有可能给JavaScript函数一个类型/类?
- 确保两个函数一个接一个地执行,其中第一个函数内部有一个异步调用
- 两个不同的ajax函数一个接一个调用返回相同的值
- jQuery第一次更改函数一个工作
- 给这个函数一个id
- 如何给回调函数一个值一个变量在特定时刻
- 使用回调使两个函数一个接一个地运行
- 两个函数(一个用php)是否可以用“;onclick”;
- 两个几乎相同的函数.一个函数用Queue进行排队.Jquery效果在queued函数上不起作用.为什么