【发布时间】:2013-06-12 10:33:36
【问题描述】:
我想创建一个 Point 的实例,带有和不带有 new 运算符,例如:
Point(5, 10); // returns { x: 5, y: 10 }
// or
new Point(5, 10); // also returns { x: 5, y: 10 }
到目前为止with the help of StackOverflow我已经成功了。
function Point() {
if (!(this instanceof Point)) {
var args = Array.prototype.slice.call(arguments);
// bring in the context, needed for apply
args.unshift(null);
return new (Point.bind.apply(Point, args));
}
// determine X and Y values
var pos = XY(Array.prototype.slice.call(arguments));
this.x = pos.x;
this.y = pos.y;
}
但这看起来很可怕,我什至将null 移到数组中,这样我就可以使用apply。就是感觉不对。
我找到了很多解决方案,如何使用新的构造函数和构造函数包装器来实现它,但我想让它尽可能简单(它只是一个简单、简单的点)。
有没有更简单的方法来实现这种行为?
【问题讨论】:
-
这必须适用于所有功能还是仅适用于 1 个功能?如果只有 1,坦率地说,最好重写该函数。
-
@Qantas94Heavy 这只是
Point函数,我想表现得像这样。但当然它会被多次调用。
标签: javascript constructor arguments instance