Во-первых, вы не создаете обычные объекты.
Я просматриваю исходный код jQuery 1.7.2 для расширения.
https://github.com/jquery/jquery/blob/master/src/core.js
И я замечаю строку:
if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy))
должен оцениваться как true
для выполнения глубокого копирования. копия — это просто часть текущего копируемого объекта.
Но вы не создаете «простые» объекты. Вы создаете объекты, сгенерированные вызовом конструктора с оператором new.
Теперь в isPlainObject кажется, что эти строки должны быть оценены. (где hasOwn равно hasOwn = Object.prototype.hasOwnProperty
try {
// Not own constructor property must be Object
if ( obj.constructor &&
!hasOwn.call(obj, "constructor") &&
!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
return false;
}
} catch ( e ) {
// IE8,9 Will throw exceptions on certain host objects #9897
return false;
}
И здесь делается вывод, что это не «plainObject».
Это имеет смысл, если учесть, что объекты с конструктором, вероятно, должны создаваться с помощью этого конструктора или, по крайней мере, использовать какой-то метод "клонирования", как вы видите в других языках/фреймворках.
person
JayC
schedule
08.05.2012
.clone
jQuery
? - person Explosion Pills   schedule 08.05.2012jQuery
.clone
, но увидел этот ответ на аналогичный вопрос и решил сначала попробовать. - person user986122   schedule 08.05.2012