Cub*_*ass 5 javascript json prototype eval
尝试反序列化JSON数据并更新每个对象的原型并继承常用函数.
但是,以下脚本抛出错误"people [0] .getFullName不是函数".分配后,反序列化对象的原型似乎未定义.
<html>
<head>
<script>
var json = '[ {"firstName": "John", "lastName": "Smith"}, {"firstName": "Nancy", "lastName": "Jones"} ]';
var people;
eval('people = ' + json);
function Person() { }
Person.prototype.getFullName = function() {
return this.firstName + ' ' + this.lastName;
}
//assign prototype
for(var i=0; i < people.length; i++){
people[i].prototype = new Person();
}
if(people[0].getFullName() !== 'John Smith')
alert('Expected fullname to be John Smith but was ' + people[0].getFullName());
</script>
</head>
</html>
Run Code Online (Sandbox Code Playgroud)
该属性是构造函数prototype的属性,而不是实例的属性。您正在寻找的是以下房产:__proto__
people[i].__proto__ = new Person();
Run Code Online (Sandbox Code Playgroud)
坏消息是它并不适用于所有浏览器。它在 Firefox 和 Safari 中工作,但在 IE 中不起作用。另一种方法是使用构造函数来实例化您的人员数组。不幸的是,您必须复制所有属性:
function Person(obj) {
for (var property in obj) {
this[property] = obj[property];
}
return this;
}
Person.prototype.getFullName = function() {
return this.firstName + ' ' + this.lastName;
}
var people;
eval('people = ' + json);
for(var i=0; i < people.length; i++) {
people[i] = new Person(people[i]);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2361 次 |
| 最近记录: |