use*_*742 16 javascript this prototypal-inheritance
这是我的javascript对象,我想知道如何避免在原型中多次使用"this".我知道有许多理论和原型关系的联系,这可能已经得到了解答,但由于我无法满足所有目的,我认为这可能值得另一个问题.
function shape(smth) {
this.a = smth
this.b = 2
this.c = 3
}
shape.prototype.doCalculus = function () {
return this.a * this.b + this.c - (2 * (this.b + this.c) + this.a);
}
module.exports = shape
Run Code Online (Sandbox Code Playgroud)
如果你想要一个对象的公共成员,它们必须从this指针引用.这就是OO在Javascript中的工作方式.别无选择.
如果你在函数中有很多对同一变量的引用,你可以暂时将它放在一个局部变量中,只是为了保存一些引用逻辑(与任何多步引用相同),但你仍然需要最初检索使用this.varName.
有一个方案在构造函数闭包中使用"私有"成员变量,并且不使用可以在某些情况下使用的原型,这允许您直接引用变量而不使用以下内容this:
function shape(smth) {
var a = smth,
b = 2,
c = 3;
this.doCalculus = function() {
return a * b + c - (2 * (b + c) + a);
}
}
module.exports = shape
Run Code Online (Sandbox Code Playgroud)
对于创建大量实例的对象类型,这可能会占用更多内存,因为方法不存储在共享原型中,而是为每个实例单独创建.有人认为,在大多数用途中,记忆消耗的差异并不重要.
this通过使用Object.create创建原型链,然后直接在结果对象上声明属性,可以避免在构造函数中使用.
function Shape(smth) {
var shape = Object.create(Shape.prototype);
shape.a = smth;
shape.b = 2;
shape.c = 3;
return shape;
}
Run Code Online (Sandbox Code Playgroud)
这消除了需要this在你的Shape功能,这意味着我们不再需要调用它new要么.
new Shape(1); // { a: 1, b: 2, c: 3, __proto__: Shape.prototype }
Shape(1); // { a: 1, b: 2, c: 3, __proto__: Shape.prototype }
Run Code Online (Sandbox Code Playgroud)
但是,您仍需要this在原型方法中使用以引用正确的实例.
| 归档时间: |
|
| 查看次数: |
3542 次 |
| 最近记录: |