Возможно ли создать функцию inline clone() для объекта Javascript, указав свойство prototype.clone()?встроенная функция clone() для объекта Javascript с использованием prototype.clone()
Я написал простой JavaScript-объект под названием ZendeskUser и должен использовать ZendeskUser.prototype для добавления функций экземпляра в определение моего объекта (как описано ниже внизу страницы: https://developer.zendesk.com/apps/docs/agent/require).
Я пытаюсь использовать ZendeskUser.prototype.clone = function() {...}, чтобы определить функции клонирования для экземпляров объектов, чтобы я мог вызвать myUserObject.clone() для создания копии.
Я могу назвать это, но это делает что-то очень странное!
Код выглядит следующим образом:
function ZendeskOrganization(app, id, name, customer_type)
{
this.app = app;
this.id = id;
this.name = name;
this.customer_type = customer_type;
this.extra_org_fields = [];
for(var i = 0; i < app.organization_field_mappings.length; i++)
{
this.extra_org_fields[ i ] = { field_def: app.organization_field_mappings[ i ], value: null };
}
}
ZendeskOrganization.prototype.clone = function()
{
var clonedOrganization = new ZendeskOrganization(this.app, this.id, this.name, this.customer_type);
console.log("cloning Org, this.name = '" + this.name + "', new ZendeskOrganization = ");
console.dir(clonedOrganization);
for(var i = 0; i < this.extra_org_fields.length; i++)
{
clonedOrganization.extra_org_fields[ i ] = { field_def: this.extra_org_fields[ i ].field_def, value: this.extra_org_fields[ i ].value };
}
console.log("finished cloning Org, clonedOrganization = ");
console.dir(clonedOrganization);
return clonedOrganization;
};
function ZendeskUser(app, id, name, email, customer_type, organization_id)
{
//console.log("Started ZendeskUser constructor with id=" + id + ", name = " + name + ", email = " + email + ", customer_type = " + customer_type + ", app = ...");
//console.dir(app);
this.app = app;
this.id = id;
this.name = name;
this.email = email;
this.customer_type = customer_type;
this.organization_id = (typeof(organization_id) === "undefined") ? null : organization_id; //this is underd to store the org id even though this info if available inside the attached org object.
this.orgObject = null; //this will only be instantiated when needed, not now, even if there is an organization id
this.extra_user_fields = [];
for(var i = 0; i < app.user_field_mappings.length; i++)
{
this.extra_user_fields[ i ] = { field_def: app.user_field_mappings[ i ], value: null };
}
}
ZendeskUser.prototype.clone = function()
{
console.log("Started ZendeskUser.prototype.clone with this=");
console.dir(this);
console.log("and this.orgObject = ");
console.dir(this.orgObject);
var clonedUser = new ZendeskUser(this.app, this.id, this.name, this.email, this.customer_type, this.organization_id);
clonedUser.orgObject = (this.orgObject === null) ? null : this.orgObject.clone();
for(var i = 0; i < this.extra_user_fields.length; i++)
{
clonedUser.extra_user_fields[ i ] = { field_def: this.extra_user_fields[ i ].field_def, value: this.extra_user_fields[ i ].value };
}
console.log("Finished ZendeskUser.prototype.clone, returning:");
console.dir(clonedUser);
return clonedUser;
};
У меня есть проблема в том, что это, кажется, делает очень странные вещи. Я создал новый объект ZendeskUser myUser и создавал его с помощью реальных данных и называл myUser.clone() и клонирован отдельно от свойства orgObject.
Может ли кто-нибудь осмыслить вывод, который я вижу на моей хромированной Javascript-консоли? Почему это полностью установленный объект, но this.orgObject имеет значение null !?
Игнорировать подсветка синтаксиса в моем отладочный лог выхода ниже, это должно быть просто текст:
Started ZendeskUser.prototype.clone with this=
ZendeskUser
app: AppSubclass
customer_type: "mailshot_use_default_values"
email: "[email protected]"
extra_user_fields: Array[1]
id: 2799643595
name: "John Milner"
orgObject: ZendeskOrganization
app: AppSubclass
customer_type: "TEST_ONLY"
extra_org_fields: Array[2]
id: 3060365935
name: "My Company"
__proto__: Object
organization_id: 3060365935
__proto__: Object
and this.orgObject =
null
Finished ZendeskUser.prototype.clone, returning:
ZendeskUserapp: AppSubclass
customer_type: "mailshot_use_default_values"
email: "[email protected]"
extra_user_fields: Array[1]
id: 2799643595
name: "John Milner"
orgObject: null
organization_id: 3060365935
__proto__: Object
Я не понимаю. 'orgObject' по умолчанию является' null'. Объект, который вы клонируете, похоже, имеет свойство 'null'' orgObject'. Почему вы ожидаете чего-то, кроме «нулевого»? –
Я установил 'myUser.orgObject = новую ZendeskOrganization (......);' перед вызовом. Вы можете увидеть из моего отладочного вывода console.log внизу, что это полностью созданный объект, но затем на строке после того, как он «null». Я весьма озадачен! – JohnDev
, похоже, работал на меня: 'var app = {user_field_mappings: [], organization_field_mappings: []}; var fred = новый ZendeskUser (приложение, «id123», «Fred», «SuperUser!»); var org = new ZendeskOrganization (приложение, «org123», «EvilCorp.», «Super»); fred.orgObject = org; var fred2 = fred.clone(); ' – vlaz