如何将构造函数对象中的方法应用于任意对象

时间:2017-01-10 16:35:14

标签: javascript javascript-objects

我有一个具有各种字段的构造函数对象;举个简单的例子,比如说

# 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实例?

5 个答案:

答案 0 :(得分:1)

我认为你弄错了,你要做的是:

var somePerson = new Person(123, 'joe');

然后你就可以写:

somePerson.someFunction();

答案 1 :(得分:1)

您需要创建一个新的Person个实例,无需使用callapply

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) {...}