Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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,假设我有100个对象 var a={name:'a'}; var b={name:'b'}; ... ... var xyz={name:'xyz'}; 现在我想为所有这些对象添加一个方法,该方法将对所有对象执行类似的操作,比如显示属性“name”。如何向所有这些对象的Object.prototype添加方法。您可以为一组对象创建一个“模板”,如下所示: function myObj() { this.name = arguments[0]; }; var a = new myObj('

假设我有100个对象

var a={name:'a'};
var b={name:'b'};
...
...
var xyz={name:'xyz'};
现在我想为所有这些对象添加一个方法,该方法将对所有对象执行类似的操作,比如显示属性“name”。如何向所有这些对象的Object.prototype添加方法。

您可以为一组对象创建一个“模板”,如下所示:

function myObj() {
  this.name = arguments[0];
};
var a = new myObj('a');
在上面的代码中,“模板”(
myObj
)只是一个接收N的JavaScript(可以实现其他替代方案)

现在,为了创建使用此“模板”的对象,您只需要像下面这样实例化它们:

function myObj() {
  this.name = arguments[0];
};
var a = new myObj('a');
见下面的例子

函数myObj(){
this.name=参数[0];
};
var a=新的myObj(“a”);
var b=新的myObj(“b”);
var xyz=新的myObj('xyz');
console.log(a.name);
console.log(b.name);

console.log(xyz.name)您可以通过为所有对象创建一个类并为该对象添加原型方法(为什么不创建类方法)来实现相同的功能

下面是与每个问题相同的示例-

类MyObject{
建造师(obj){
this.obj=obj;
}
}
var a=新的MyObject({
姓名:“a”
});
var b=新的MyObject({
姓名:'b'
});
var xyz=新的MyObject({
名称:“xyz”
});
MyObject.prototype.getName=函数(){
返回this.obj.name;
}
log(a.getName());
log(b.getName());
log(xyz.getName())使用Object.create(),您可以创建自己的“原型”,然后使用它来创建所有对象

让myProto={
func(){
返回此.name;
}
}
设a=Object.create(myProto);
a、 名称='a';
//或者使用Object.assign()
设b=Object.assign({name:'b'},myProto);
//Object.create分配给_proto__
console.log(a.uuu proto_uuu);
//Object.assign不是,它作为成员函数赋值
console.log(b.\uuuu proto\uuuu);
console.log(b.func);
console.log(a.func())

console.log(b.func())
查看顶部的各种警告。是否希望
name
属性等于变量名?您可能希望建立一个es6类并使用它创建多个实例。由于您计划制作这么多,您可以将该方法附加到类的原型上,而不是将该方法直接放在类中。您可以附加到
Object.prototype
,但这是不可取的。您可以使用Object.assign to dupe,也可以将一个方法附加到循环中的每个实例上。@dandavis我发现,使用构造函数比使用对象文字要容易得多。感谢您的支持。正如我在问题帖子的评论中所说的,由于他创建了这么多这样的类,他可能希望在myObject类的原型上声明“getName”,而不是直接在类上声明“getName”,如您的示例所示。显然,这两种方法都可以工作,但将方法直接放在类上会重新实例化每个实例的方法。@DevinFields我通过查看原型与类函数的权衡编辑了我的答案,并添加了相同的参考