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”},…}