JavaScript在一行中设置了命名函数的原型

JavaScript set prototype of named function on one line

本文关键字:函数 原型 设置 一行 JavaScript      更新时间:2024-04-08

所以我正试图找到一个真正干净的JavaScript函数原型模式。

我可以做到:

var Person = function () {
  // person logic
}.prototype.foo = function () {
  // people's foo logic
}

但我想命名我的类构造函数,而不是多余的。以下代码在单词prototype之前产生意外的.

function Person() {
  // person logic
}.prototype.foo = function () {
  // people's foo logic
}

如何在同一行定义我的原型,而不将Person冗余地设置为变量?

"如何在不将Person冗余设置为变量的情况下在同一行定义我的原型?"

像这样(这里绝对没有冗余):

var Person; (Person = function() {
}).prototype.foo = function() {
};

为了处理=运算符的较低优先级及其从右到左的关联性,需要将变量的声明与第一个赋值进行分离。

但国际海事组织对此没有任何好处。保持代码简单明了。


你的问题和评论都暗示你认为这里有一些冗余。没有。

您的要求似乎是任意的,但如果您真的想要这样做,那么将函数传递给一个帮助函数,该函数将这些部分组合在一起。

function why(ctor, members) {
    for (var m in members)
        ctor.prototype[m] = members[m];
    return ctor;
}

并像这样使用:

var Person = why(function() {
}, {
    foo: function() {
    }
});

同样,没有真正的好处,只是增加了开销,但它满足了您的要求。

有可能吗?我所知道的最紧凑的模式是:

var Person = function() {
    this.func = function() { console.log('hello'); };
};
var p = new Person();
console.log(p instanceof Person);
console.log(typeof p.func);
p.func();