Javascript 如何将对象文字映射为构造函数的实例?

Javascript 如何将对象文字映射为构造函数的实例?,javascript,prototype,Javascript,Prototype,我有一个构造函数,如下所示: var Person = function (name, age) { this.name = name; this.age = age; } Person.prototype = { getAgePlusTwo: function () { return this.age + 2; } } 我可以创建这样的对象并访问实例方法: var p1 = new Person('Person1', 22); p1.getA

我有一个构造函数,如下所示:

var Person = function (name, age) {
    this.name = name;
    this.age = age;
}

Person.prototype = {
    getAgePlusTwo: function () {
        return this.age + 2;
    }
}
我可以创建这样的对象并访问实例方法:

var p1 = new Person('Person1', 22);
p1.getAgePlusTwo(); 
但是,我从JSON服务获取对象,因此无法使用
new
创建对象。有没有办法像这样映射对象文字:

var p2 = { name: 'Person2', age: 25 }

要成为
Person
的实例,我可以使用其实例方法,如
p2.getAgePlusTwo()

如果您可以更改
Person
构造函数以接受保留所有信息的对象,而不是
name
age
参数,我会这样做:

小提琴

JS

var Person = function (optns) {
    if(optns){
        this.name = optns.name || "";
        this.age = parseInt(optns.age) || 0;
    }
}

var json1 = {name: "Person2", age: "22"}

var p2 = new Person(json1);

如果您只想在给定对象上使用为Person定义的实例方法,那么希望它对您有所帮助

Person.prototype.getAgePlusTwo.call(p2)

提供的
p2
具有
getAgePlusTwo
使用的所有必需属性。此外,如果函数接受任何附加参数,则可以在
p2
之后传递这些参数。您可以阅读有关
函数.prototype.的更多信息。如果您不想修改构造函数,可以在

处调用

function makePerson(json){
  return new Person(json.name,json.age);
}

var p2 = makePerson({name:'Lebowski',age:41});
p2.getAgePlusTwo();

以一般方式,尝试以下操作:

function parseObject(jsonObject, classToRealize) {
    var isCorrect = true;
    var comparison = new classToRealize();
    var realizedObject = Object.create(classToRealize.prototype);

    if (Object.keys(jsonObject).length === Object.keys(comparison).length) {
        for (property in comparison) {
            if (typeof(comparison[property]) != 'function') {
                if(!jsonObject.hasOwnProperty(property)) {
                    isCorrect = false;
                    break;
                } else {
                  realizedObject[property] = jsonObject[property];  
                }
            }
        }
    } else {
        isCorrect = false;
    }

    if (isCorrect) 
        return realizedObject;
    else
        return null;
}

它将检查json的数据完整性,并允许您从任何json数据解析任何对象。如果出现任何错误,它将返回null。我做了一个例子来说明这一点(当你来到页面时,它会显示4个警报)。

对于单个对象来说这很好,但是对于我从JSON服务获得的数千个对象来说,这样做感觉很尴尬。对不起,我不明白你的意思。从JSON服务中,您将收到一系列信息,对吗?比如{{名字:“约翰”,年龄:“25”},{名字:“彼得”,年龄:“35”},…}