gpt4 book ai didi

javascript - Coffeescript/Javascript 为什么,克隆数组中的对象在传递给方法时似乎丢失了它们的引用?

转载 作者:搜寻专家 更新时间:2023-11-01 04:31:02 26 4
gpt4 key购买 nike

我正在使用 slice() 克隆一个对象数组,但是当我将该克隆的数组传递给另一个方法时,该数组的内容正在丢失它们的引用并变为 undefined

class Chooser
constructor: (@order, @items) ->
# do stuff

choose: ->
console.debug "Choosing", @order.size, "from", @items.slice()
@process(@order.size, @items.slice())
# do stuff

process: (count, items) ->
console.debug "count", count
console.debug "items", items
console.debug "@items", @items
# do recursive stuff that includes an items.shift()

第一个 console.debug 给了我预期的结果:

Choosing 10 items from [Item, Item]

ItemItem 正是我所期望的。

但是接下来的 console.debug 行给我

count 10
items [undefined x 2]
@items [Item, Item]

我知道 @items.slice() 创建了 @items副本,因此数组中的对象是引用相同的 Item 对象。 Item 对象显然仍然存在,因为它们仍在原始的 @items 数组中。

为什么,克隆数组中的对象似乎在 process 方法中丢失了它们的引用?

查看此 Working example of the problem converted to Javascript

最佳答案

请参阅此答案以了解您的代码中发生的情况:

https://stackoverflow.com/a/24176638/635411

如您所见,切片工作正常:

var MyClass = (function() {

function MyClass(items) {
this.items = items;
}

MyClass.prototype.fn1 = function() {
console.log(this.items);
this.fn2(this.items.slice());
};

MyClass.prototype.fn2 = function(items){
console.log(items);
};

return MyClass;
})();

new MyClass([{id:1, name:'a'}, {id:2, name:'b'}]).fn1();

您看到的是您的阵列在您在控制台中展开之前发生了移动。如果您实际将对象字符串化,您可以看到它已成功传入。

var MyClass = (function() {

function MyClass(items) {
this.items = items;
}

MyClass.prototype.fn1 = function() {
console.log(this.items);
this.fn2(this.items.slice());
};

MyClass.prototype.fn2 = function(items){
console.log(items);
console.log(JSON.stringify(items, null, 2));
items.shift();
items.shift();
};

return MyClass;
})();

new MyClass([{id:1, name:'a'}, {id:2, name:'b'}]).fn1();

关于javascript - Coffeescript/Javascript 为什么,克隆数组中的对象在传递给方法时似乎丢失了它们的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30411610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com