Javascript 构造函数 - 返回 JSON 对象的效果

标签 javascript json

让 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/

相关文章:

javascript - 如何获取字符串文字并将其保存回原始 JSON?

javascript - 如何访问 JSON API 响应中的嵌套信息?

javascript - Angular js表单提交并将准备好的json数据发送到服务器

ios - 我正在使用 dchohfi 开发的 KeyValueObjectMapping。但在映射 JSON 对象数组时面临问题

ios - 在 TableView Controller 中显示之前对 JSON 响应进行排序 - Objective C

javascript - 使用 nuxt-child 仅一层的 Nuxt 动态嵌套路由

javascript - Google 网站优化器控件 Javascript

javascript - 如何使用 mongoose.js 驱动程序和 express.js 在 mongodb 中保存和查询图像等二进制数据?

json - 在 JsonSerialization 中为特定的 Json 响应转换 JSON 响应的内容

Javascript:无法在 Selenium 中使用 Firefox 浏览器