让 javascript 构造函数返回 JavaScript 对象文字与简单地使用 this.XYZ
设置属性之间是否存在任何性能或功能差异。例如:
function PersonA(fname, lname) {
this.fname = fname;
this.lname = lname;
}
function PersonB(fname, lname) {
return {
"fname": fname,
"lname": lname
};
}
两者似乎都表现得很好:
PersonA.prototype.fullName = function() { return this.fname + " " + this.lname; };
PersonB.prototype.fullName = function() { return this.fname + " " + this.lname; };
var pA = new PersonA("Bob", "Smith");
var pB = new PersonB("James", "Smith");
alert(pA.fullName());
alert(pB.fullName());
是否出于某种原因更受欢迎,还是品味问题?如果口味,是不是标准多一点?
最佳答案
它们并不完全相同。
如果您返回从构造函数创建的对象...
- 它将继承构造函数的
原型(prototype)
- 它将有
instanceof
可用作为测试哪个构造函数创建它的方法
fullName()
方法似乎适用于 pB
的原因是您正在为两者使用 PersonA
构造函数。
var pA = new PersonA("Bob", "Smith"); // uses PersonA constructor
var pB = new PersonA("James", "Smith"); // uses PersonA constructor???
仅供引用,正确的术语是“JavaScript object literal”,而不是“JSON object literal”。
编辑:您已更新问题中的代码以使用PersonB
构造函数。再次运行,你会发现控制台报错。
关于Javascript 构造函数 - 返回 JSON 对象的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7207777/