JavaScript 提供了两种不同的方法来创建具有属性和方法的自定义对象:原型方式和闭包方式。
这种方法对于 JavaScript 来说更加原生,并且利用了构造函数的原型查找属性
function Shape(x, y) { this.x = x; this.y = y; } Shape.prototype.toString = function() { return 'Shape at ' + this.x + ', ' + this.y; }; function Circle(x, y, r) { Shape.call(this, x, y); // Invoke base constructor this.r = r; } Circle.prototype = new Shape(); // Set subclass prototype Circle.prototype.toString = function() { return 'Circular ' + Shape.prototype.toString.call(this) + ' with radius ' + this.r; };
此方法完全避免了原型继承,为每个实例创建一个新的闭包。
function Shape(x, y) { var that = this; this.x = x; this.y = y; this.toString = function() { return 'Shape at ' + that.x + ', ' + that.y; }; } function Circle(x, y, r) { var that = this; Shape.call(this, x, y); // Invoke base constructor this.r = r; var _baseToString = this.toString; this.toString = function() { return 'Circular ' + _baseToString.call(that) + ' with radius ' + this.r; }; } var myCircle = Circle(); // Using `new` is optional here
两种方法各有优点
原型方式
闭包方式
最终,最佳选择取决于具体的项目要求和偏好。
以上是原型与闭包:哪种 JavaScript 对象创建方法适合您?的详细内容。更多信息请关注PHP中文网其他相关文章!