gpt4 book ai didi

javascript - 在设置函数原型(prototype)之前使用原型(prototype)的属性

转载 作者:行者123 更新时间:2023-12-03 11:12:33 25 4
gpt4 key购买 nike

我想为函数的原型(prototype)分配一个属性,并在将原型(prototype)设置为函数的原型(prototype)之前使用该属性(很难解释)。如果我在 Java 中执行此操作,我只需在基类上创建一个公共(public)静态最终变量。例如...

function Foo(a, b) {
this.a = a;
this.b = b;
}

function Bar() {
this.prototype.A = 100;
this.prototype.B = 250;
Foo.call(this, this.prototype.A, this.prototype.B);
}
Bar.prototype = Object.create(Foo); // Bar.A and Bar.B are now undefined, not what I
// want to happen.

潜在实现#1...

function Foo(a, b) {
this.a = a;
this.b = b;
}

var tempA = 100;
var tempB = 250;

function Bar() {
Foo.call(this, tempA, tempB);
}
Bar.prototype = Object.create(Foo);
Bar.prototype.A = tempA;
Bar.prototype.B = tempB;

潜在实现#2...

function Foo(a, b) {
this.a = a;
this.b = b;
}

var barPrototype = Object.create(Foo);
barPrototype.A = 100;
barPrototype.B = 250;

function Bar() {
Foo.call(this, barPrototype.A, barPrototype.B);
}
Bar.prototype = barPrototype;

有人对哪种实现更好有偏好吗?或者是否有更优雅的方法(没有临时变量)来做到这一点?

最佳答案

您只想扩展 Foo 的原型(prototype)并向其添加其他属性吗?为此,你可以使用这样的东西:

function Bar() {
new Foo.call(this, this.A, this.B); // It's a constructor, should use new
}

var proto = Object.create(Foo.prototype);
proto.A = 100;
proto.B = 250;

Bar.prototype = proto;

但是,如果您想进一步扩展此功能,那么您确实需要一个 mixin 方法,它允许您将两个对象合并在一起。 如果您已经在使用 jQuery(注意:绝对不提倡仅出于此目的),您可以使用 $.extend() 方法:

Bar.prototype = $.extend({}, Foo.prototype, {
A: 100,
B: 250
});

如果您不使用 jQuery,那么在其他地方找到类似的方法应该不难(例如 Underscore 也有一个)

<小时/>

如果您想要一个共享变量,可供FooBar使用,那么您也可以将它们的定义包装在一个Immediately-Invoking Function Expression (IIFE)并在此函数中定义 A 和 B 私有(private)变量:

(function() {
var A = 100,
B = 250;

function Foo() { ... }

function Bar() {
Foo.call(this, A, B);
}
})();

如果 A 和 B 是更全局的常量,并且与 Bar 没有内在联系,则这会更合适。

关于javascript - 在设置函数原型(prototype)之前使用原型(prototype)的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27505507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com