Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript在一行上设置命名函数的原型_Javascript - Fatal编程技术网

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

JavaScript在一行上设置命名函数的原型,javascript,Javascript,所以我试图找到一个真正干净的JavaScript函数原型模式 我可以这样做: var Person = function () { // person logic }.prototype.foo = function () { // people's foo logic } 但是我想命名我的类构造函数,而不是多余的。下面的代码在单词prototype之前生成意外的 function Person() { // person logic }.prototype.foo = funct

所以我试图找到一个真正干净的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设置为变量?”

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

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

但在我看来,这并没有什么好处。保持代码简单明了


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

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

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();

您可能更喜欢使用
Object.create()
的模式。第一个代码真的有效吗?将
Person
设置为变量不会是“多余的”。它将只执行一次,并且无论如何都需要访问它。即使使用函数声明而不是函数表达式,也会有变量
Person
(否则,您计划如何创建实例?)我只想指定函数名一次。@JacksonGariety:它只指定一次。你是说你只想“打”一次?哦,对不起。如果不将函数和原型成员传递给助手,您就无法完成所需的操作。我认为问题中提到了原型,您根本没有使用它,Person的每个实例都有自己的func版本。如果创建数百个复杂对象实例,则资源无效。关于构造函数和原型:
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();