Javascript 如何从新对象返回值,同时保留其方法

Javascript 如何从新对象返回值,同时保留其方法,javascript,Javascript,我有这样的代码: function set(a) { this.foo = function(){ alert('bar'); } return a; } var b = new set([2,3,4]); b; //returns [2,3,4] b.foo(); //undefined function 我希望将数组输入作为新集合的返回值返回,而不必将其附加到属性,例如this.arr=a 如何在不从对象中删除foo方法的情况下实现这一点 function set

我有这样的代码:

function set(a) {
  this.foo = function(){
    alert('bar');
  }

  return a;
}

var b = new set([2,3,4]);

b; //returns [2,3,4]
b.foo(); //undefined function
我希望将数组输入作为新集合的返回值返回,而不必将其附加到属性,例如
this.arr=a

如何在不从对象中删除foo方法的情况下实现这一点

function set(a) {
  var o = {};

  o.foo = function(){
    alert('bar');
  };
  return o;
}
应该是您想要的-您不需要参数


应该是您想要的-您不需要参数。

如果我正确理解您的目的,您需要:

function set(a) {
  a.foo = function(){
    alert('bar');
  }
  return a;
}

var b = new set([2,3,4]);
b.foo(); //alerts

…即。将方法附加到输入,而不是像您那样附加到全局命名空间。

如果我正确理解您的目的,您需要:

function set(a) {
  a.foo = function(){
    alert('bar');
  }
  return a;
}

var b = new set([2,3,4]);
b.foo(); //alerts

…即。将方法附加到输入,而不是像您那样附加到全局名称空间。

我认为您可以这样做

function set(a) {
  a.foo = function(){
    alert('bar');
  }

  return a;
}

var b = new set([2,3,4]);

b; //returns [2,3,4]
b.foo(); //this shows alert

我想你可以这样做

function set(a) {
  a.foo = function(){
    alert('bar');
  }

  return a;
}

var b = new set([2,3,4]);

b; //returns [2,3,4]
b.foo(); //this shows alert

要保持构造函数干净,并且如果希望将this.foo保留在set()中,可能应该将
new set().foo
方法添加到
Array.prototype

function set(a) {

   this.foo = function(){
    alert('bar');
  };

   return a;

}
Array.prototype.foo=new set().foo;
var b = new set([2,3,4]);

console.log(b); //returns [2,3,4]
b.foo();// alerts 'bar'

要保持构造函数干净,并且如果希望将this.foo保留在set()中,可能应该将
new set().foo
方法添加到
Array.prototype

function set(a) {

   this.foo = function(){
    alert('bar');
  };

   return a;

}
Array.prototype.foo=new set().foo;
var b = new set([2,3,4]);

console.log(b); //returns [2,3,4]
b.foo();// alerts 'bar'

为什么不是a.foo=function?但是您应该删除该上下文中的'new',this
引用窗口对象,因此您实际上是在将
foo
附加到全局命名空间。@Nit除非对帖子进行编辑,否则,
set()
将作为构造函数调用,因此
this
应该引用
new
实例,而不是全局对象。为什么不使用a.foo=function?但是您应该删除该上下文中的“new”,因为
this
引用窗口对象,所以您实际上是在将
foo
附加到全局名称空间。@Nit被作为构造函数调用,因此
应该引用
新的
实例,而不是全局对象。实际上,OP希望一个集合包含数组。此外,它还需要返回参数。不是空对象。实际上,OP希望集合包含数组。此外,它还需要返回参数。不是空对象。解决方案看起来很有效,但如果方法仅与我的集合对象相关,我不希望向数组原型添加方法。解决方案看起来有效,但如果方法仅与我的集合对象相关,我不希望向数组原型添加方法。Genius!我怎么没想到!天才!我怎么没想到!