我想创建一个Point
带和不带new
运算符的实例,例如:
Point(5, 10); // returns { x: 5, y: 10 }
// or
new Point(5, 10); // also returns { x: 5, y: 10 }
到目前为止,我在 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
. 那感觉不对。
我找到了很多解决方案,如何使用新的构造函数和构造函数包装器来实现它,但我想让它尽可能简单(这只是一个简单的点)。
有没有更简单的方法来实现这种行为?