2017-01-11 6 views
0

Когда я пытаюсь создать новый объект из существующего объекта, как показано ниже, я не могу напечатать значения из повторяющегося объекта с помощью метода JSON.stringify(). Невозможно выяснить, в чем проблема.Создание реплики объекта

<!DOCTYPE html> 
<html> 
<body> 

<p>Creating a JavaScript Object.</p> 

<p id="demo"></p> 

<script> 
    var person = {firstName:"John2", lastName:"Doe", age:50, eyeColor:"blue"}; 
    var man = Object.create(person); 
    document.getElementById("demo").innerHTML = 
    man.firstName + " is " + man.age + " years old." + JSON.stringify(man); 
</script> 

</body> 
</html> 

Выход Я получаю John2 is 50 years old. {}

+0

'JSON.stringify' принимает только * собственные * свойства объекта, а не свойства в своей цепочке прототипов. –

+0

Также: [Нет такой вещи, как «объект JSON»] (http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/) –

ответ

0

я достиг желаемого результата следующим образом. Ссылка how to use javascript Object.defineProperty помогла мне в решении моей проблемы.

//check whether property name of v exists in v1. 
    Object.getOwnPropertyNames(v[0]).forEach(function(val,idx,array){ 
     console.log(val + '->' + v[0][val]); 
     if (val !== undefined && val !== "_id" && !v1[0].hasOwnProperty(val)) { 
       Object.defineProperty(v1[0], val, {enumerable:true,configurable:false,get:function(){return v[0][val];}}); 
     } 
    });  
1

Проверить here

Object.create() принимает аргумент, который устанавливает объект в качестве прототипа. Он используется для создания нового объекта и продлить другой.

Вы должны использовать Object.assign

var man = Object.assign({}, person); 
+0

Для простых объектов это работает отлично, но для глубокого клонирования я думаю, что нам нужно написать свою собственную логику. –

+0

да .. это способ получить мелкую копию по образцу вопроса .. для глубокой копии вы можете проверить [здесь] (http://stackoverflow.com/questions/122102/what-is-the-most-efficient -way-to-deep-clone-an-object-in-javascript) –

+0

Мое требование - это что-то вроде ниже. Я должен иметь возможность объединить src1 и src2 следующим образом. src1 = { "имя": "ABC", "по убыванию": [[{ "а": "б"}] [{ "с": "г"}] [{ "е": "е"}]] } и src2 = {"name": "abc", "ver": 1} в {"name": "abc", "desc": [[{"a": "b"}] [{"c" : "d"}] [{"e": "f"}]], "ver": 1}, и я не использую jquery –

Смежные вопросы