今天我正在Function.prototype.bind()阅读MDN文档。在Bound functions used as constructors部分下有一个我无法理解的例子。
我在Node.js(v.4.4.5)和Google Chrome(v58.0.3029.81)中运行了以下代码
function Point(x, y) {
this.x = x;
this.y = y;
}
Point.prototype.toString = function() {
return this.x + ',' + this.y;
};
var p = new Point(1, 2);
p.toString(); // '1,2'
var emptyObj = {};
var YAxisPoint = Point.bind(emptyObj, 1/*x*/);
var axisPoint = new YAxisPoint(5);
console.log(axisPoint.toString()); // '1,5'
console.log(axisPoint instanceof Point); // true
console.log(axisPoint instanceof YAxisPoint); // true
console.log(new Point(17, 42) instanceof YAxisPoint); // true
我可以清楚地看到为什么axisPoint
是Point
和YAxisPoint
的实例。但是,世界如何new Point(17,42)
成为YAxisPoint
的实例?