Javascript:如何将对象的JSON数组重新转换为Object类型共享原型?

Zac*_*ott 6 javascript jquery json

如果您有一个从JSON创建的产品对象数组,那么如何将原型方法添加到产品对象中,以便它们都指向相同的方法?如何训练JavaScript识别数组中的所有产品对象是不是重新创建它们的同一个类的实例?

例如,如果我下拉产品的JSON数组,并希望数组中的每个产品都有原型方法,我如何将单个原型方法添加到每个产品副本?

我首先想到的是一个Product构造函数,它将产品JSON数据作为参数,并返回一个带有原型等的新产品,它将取代从服务器发送的数据.我认为这是不切实际的,因为你正在重新创建对象.我们只想添加所有对象共有的函数.

是否可以将$.extend对象的原型属性转换为JSON对象,以便每个JSON对象引用完全相同的函数(而不是副本)?

例如:

var Products = [];
Products[0] = {};
Products[0].ID = 7;
Products[0].prototype.GetID = function() { return this.ID; };
Products[1].ID = 8;
Products[1].prototype = Products[0].prototype;  // ??
Run Code Online (Sandbox Code Playgroud)

我知道这看起来很糟糕,但是如果你$.extend对每个Product对象原型的方法进行JQuery $.extend怎么办?创建一个加载了原型的对象然后在现有的Product对象上创建该对象?你会怎么编码?有什么更好的可能性?

BDa*_*awg 1

所以,如果我没理解错的话,这是 KOGI 想法的一个更完整的例子:

// Create a person class
function Person( firstName, lastName ) {
    var aPerson = {
        firstName:  firstName,
        lastName:   lastName
    }

    // Adds methods to an object to make it of type "person"
    aPerson = addPersonMethods( aPerson );
    return aPerson;
}
function addPersonMethods( obj ) {
    obj.nameFirstLast = personNameFirstLast;
    obj.nameLastFirst = personNameLastFirst;
    return obj;
}
function personNameFirstLast() {
    return this.firstName + ' ' + this.lastName;
}
function personNameLastFirst() {
    return this.lastName + ', ' + this.firstName;
}
Run Code Online (Sandbox Code Playgroud)

因此,通过此结构,您可以定义要在 addPersonMethods 函数中添加的方法。这样,对象的方法就可以在一个地方定义,然后您可以执行如下操作:

// Given a variable "json" with the person json data
var personWithNoMethods = JSON.parse( json );    // Use whatever parser you want
var person = addPersonMethods( personWithNoMethods );
Run Code Online (Sandbox Code Playgroud)