为什么以下代码记录空数组,而不是加载的数组:
function Car() {
var parts = [];
this.parts = parts;
this.loadParts = loadParts;
function loadParts() {
parts = ['engine', 'wheels'];
}
}
var audi = new Car();
audi.loadParts();
console.log(audi.parts);

(试图实现揭示模式)
答案 0 :(得分:6)
您正在操纵已关闭的本地变量parts
,而不是this.parts
将您的代码更新为:
function loadParts() {
this.parts = ['engine', 'wheels'];
}
获得更可预测的结果。
答案 1 :(得分:1)
问题是您的代码重新分配了本地private myEntities entities = new myEntities();
var roleMenuMappings = entities.SystemRoles.Where( x => x.EmployeeRoleMenuMappings.Select( m => m.MasterAppMenu.ParentMenuId==null ) );
var roleMenuList = await roleMenuMappings.ToListAsync();
return View(roleMenuList);
变量,该变量最终指向与parts
不同的数组。
解决方案是将代码更改为:
this.parts
这将改变相同数组的内容。
在Javascript中的代码
function loadParts() {
parts.splice(0, parts.length, 'engine', 'wheels');
}
不会更改var x = [1, 2, 3];
var y = x;
x = [4, 5, 6]
指向的内容。
这是您的代码正在执行的操作(y
为y
)。
答案 2 :(得分:1)
因为您使用全新数组parts
覆盖parts = ['engine', 'wheels']
数组。
this.parts
是对原始数组parts = [];
的部分值的引用。
您要么填充原始数组:
function loadParts() {
parts.push('engine');
parts.push('wheels');
}
或者将this.parts
的引用设置为新数组
function loadParts() {
parts = ['engine', 'wheels'];
this.parts = parts;
}
答案 3 :(得分:1)
当你为一个对象/数组赋值时,它将包含值的引用,并且它就像你在这里所做的那样丢失它自己的引用:
this.parts = parts;
现在当你这样做时:
function loadParts() {
parts = ['engine', 'wheels'];
}
parts
丢失了自己的引用,它不再等于this.parts
,我建议您只将数据推送到parts
数组
function loadParts() {
parts.push('engine', 'wheels');
}