相关疑难解决方法(0)

在JavaScript中深度克隆对象的最有效方法是什么?

克隆JavaScript对象的最有效方法是什么?我已经看到obj = eval(uneval(o));被使用,但这是非标准的,只有Firefox支持.

我做过类似的事情,obj = JSON.parse(JSON.stringify(o));但质疑效率.

我也看到了具有各种缺陷的递归复制功能.
我很惊讶没有规范的解决方案.

javascript clone object

5181
推荐指数
48
解决办法
189万
查看次数

在javascript中指定值而不是引用

我在javascript中分配对象时遇到了一些问题.

看看这个重现我的问题的示例代码.

var fruit = {
   name: "Apple"
};

var vegetable = fruit;
vegetable.name = "potatoe";
console.log(fruit);
Run Code Online (Sandbox Code Playgroud)

它记录

Object {name: "potatoe"}
Run Code Online (Sandbox Code Playgroud)

如何将值而不是对象的引用分配给另一个对象?

javascript variable-assignment

25
推荐指数
1
解决办法
2万
查看次数

Javascript克隆对象失去了原型函数

我试图在Javascript中克隆一个对象.我已经创建了自己的"类",它具有原型功能.

我的问题:当我克隆一个对象时,克隆无法访问/调用任何原型函数.

当我去访问克隆的原型函数时,我收到一个错误:

clone.render不是一个函数

你能告诉我如何克隆一个对象并保持其原型功能

这个简单的JSFiddle演示了我得到的错误:http://jsfiddle.net/VHEFb/1/

function cloneObject(obj) 
{
   // Handle the 3 simple types, and null or undefined
   if (null == obj || "object" != typeof obj) return obj;

   // Handle Date
   if (obj instanceof Date) {
     var copy = new Date();
     copy.setTime(obj.getTime());
     return copy;
   }

   // Handle Array
   if (obj instanceof Array) {
     var copy = [];
     for (var i = 0, len = obj.length; i < len; ++i) {
         copy[i] = cloneObject(obj[i]);
     } …
Run Code Online (Sandbox Code Playgroud)

javascript

13
推荐指数
1
解决办法
1万
查看次数

Javascript toJSON自定义方法的Stackoverflow错误

脚本

读完这个答案后,我意识到我可以从JSON文字开始创建对象.

所以我猜我只能使用这个有用的JSON方法做相反的事情: JSON.stringify(myObject).

所以我做了如下:

function MyObject(id, value, desc)
{
  this.id = id;
  this.value = value;
  this.desc = desc;
  this.toJSON = function()
  {
    return JSON.stringify(this);
  }

}
Run Code Online (Sandbox Code Playgroud)

但是当我运行这个东西(演示)Maximum call stack size exceeded时会发生错误.

谷歌搜索后,我发现两个引用解释了这种行为:

如果我做对了,就会.toJSON超越.stringify.因此,如果第一个调用第二个,则生成循环.

问题

  1. (一般)为什么这个设计选择?toJSON是一种保留的特殊关键字?
  2. (具体)我解决了将.toJSON名称更改为的stackoverflow错误.display.不那么优雅.还有其他解决方案吗?

javascript oop json design-patterns

7
推荐指数
2
解决办法
1464
查看次数

JavaScript - 复制对象数组并在不修改原始数组的情况下进行更改

我有一个对象数组.我想深度复制对象数组并对每个对象进行一些更改.我想这样做而不修改原始数组或该数组中的原始对象.

这就是我做的方式.但是,作为JavaScript的新手,我想确保这是一个很好的方法.

有一个更好的方法吗?

const users = 
[
    {
        id       : 1,    
        name     : 'Jack',
        approved : false
    },
    {
        id       : 2,    
        name     : 'Bill',
        approved : true
    },
    {
        id       : 3,    
        name     : 'Rick',
        approved : false
    },
    {
        id       : 4,    
        name     : 'Rick',
        approved : true
    }
];


const users2 = 
    users
        .map(
            (u) => 
            {
                return Object.assign({}, u);
            }
        )    
        .map(
            (u) => 
            {
                u.approved = true;
                return u;
            }
        );    


console.log('New users2 array of …
Run Code Online (Sandbox Code Playgroud)

javascript arrays immutability ecmascript-6

6
推荐指数
3
解决办法
4329
查看次数