摘自《Javascript函数式编程》
在函数式编程书中这样定义元编程:编写代码来做一些事情叫作编程,而元编程是当你写的代码改变了某些代码被稀释的方式。
在Javascript中,this引用的动态性质可以用来元编程,观察下面的构造函数:
function Point2D(x, y) {
this._x = x;
this._y = y;
}
当使用new来生成Point2D函数的对象实例,会得到你所期望的字段值:
new Point2D(0, 1);
// => { _x: 0, _y: 1 }
然而,可以使用方法Function.call来进行元编程,将Point2D派生为新Point3D的构造器:
function Point3D(x, y, z) {
Point2D.call(this, x, y);
this._z = z;
}
new Point3D(10, -1, 100);
// => { _x: 10, _y: -1, _z: 100 }
Point3D并没有显示地设置this._x和this._y的值,而是通过调用Point2D的call方法动态绑定this,这样可以改变构造属性的目标。
网友评论