我有一个具有各种字段的构造函数对象;举个简单的例子,比如说
# Define other image
other_image = (255*np.random.rand(*img.shape)).astype(np.uint8)
现在,我有一个带有id和name字段的任意对象
True
我想将somePerson实例中的数据注入到Person构造函数中,因此我可以应用Person类中的所有方法,但我在apply,call和bind之间感到困惑。
我知道我可以调用一个传递所有字段的新构造函数,但是有很多字段。有没有简单的方法可以使用Person类中的方法赋予somePerson实例?
答案 0 :(得分:1)
我认为你弄错了,你要做的是:
var somePerson = new Person(123, 'joe');
然后你就可以写:
somePerson.someFunction();
答案 1 :(得分:1)
您需要创建一个新的Person
个实例,无需使用call
或apply
。
var somePerson = {id:123, name:"joe"};
var somePersonInstance = new Person(somePerson.id, somePerson.name);
somePersonInstance.someFunction(xxx);
如果方法在构造函数中不是,但在原型上,您可以使用call
:
function Person(id, name) {
this.id = id;
this.name = name;
}
Person.prototype.someFunction = function(xxx) {…};
var somePerson = {id:123, name:"joe"};
Person.prototype.someFunction.call(somePerson, xxx);
答案 2 :(得分:1)
您可以使用Object.assign()
并将somePerson
对象的属性分配给Person
的实例
function Person(id, name) {
this.id = id;
this.name = name;
this.someFunction = function() {
return this.name;
}
}
var somePerson = {id:123, name:"joe"}
var p = Object.assign(new Person, somePerson)
console.log(p.someFunction())

答案 3 :(得分:0)
确定这是怎么回事;
function PersonFactory(id, name) {
return {
id: id,
name: name,
updateName: function(name) {
this.name = name
}
}
}
正在使用它的一些例子。
var somePerson = PersonFactory(1, "Luke")
var people = {
luke: PersonFactory(1, "Luke"),
will: PersonFactory(2, "Will"),
smith: PersonFactory(3, "Smith")
}
var persons = [
PersonFactory(1, "Luke"),
PersonFactory(1, "Will"),
PersonFactory(1, "Smith")
]
people.luke.updateName("Harry");
答案 4 :(得分:0)
Person
设置为constructor function。您需要使用new
关键字来实例化Person
的新副本。
var joe = new Person(somePerson.id, somePerson.name);
现在joe
将是Person
的实例。
joe instanceof Person //true
joe.id //123
joe.someFunction //function (xxx) {...}