这里有一些例子.
// case 1:
var obj1 = {msg : 'Hello'};
var obj2 = obj1;
obj2.msg = "Hi!"; //overwrites
alert(obj1.msg); //=>'Hi!'
// case 2:
var obj1 = {msg : 'Hello'};
var obj2 = Object.create(obj1);
obj2.msg = "Hi!"; //does not overwrite
alert(obj1.msg); //=>'Hello'
// case 3:
var obj1 = {data: { msg : 'Hello'}}
var obj2 = Object.create(obj1);
obj2.data.msg = "Hi!"; //overwrites, Why?
alert(obj1.data.msg); //=>'Hi!'
Run Code Online (Sandbox Code Playgroud)
我认为Object.create()只是让两者都指向相同的原型,而赋值使得两个对象指向相同的位置(不仅仅是原型).
但那么为什么在案例3中数据对象被覆盖?
jQuery让我的生活更轻松,但我仍然是JavaScript的初学者.所以,可能是,我在这里问一个非常愚蠢的问题:
var t = {
rows: 3,
columns: 5,
getCellCount: function () {
return this.rows * this.columns;
}
};
var tn = t;
tn.rows = 6;
document.write(tn.rows + " , " + t.rows); // returns 6 , 6
Run Code Online (Sandbox Code Playgroud)
我也试过了 var tn = new t(); // but seems wrong
那么,如何从对象中检索旧的内在值,使其产生6,3
这是两个名为和 的对象:primarysecondary
var primary = {"gonna":3,"lol":114,"wouldn":2,"know":6,"lowkey":2,"man":5};
var secondary = primary;
Run Code Online (Sandbox Code Playgroud)
当我使用delete secondary['lol'];它时,它会从两个对象中删除该属性:jsfiddle
我的问题是:如何删除属性secondary而不将其删除primary?
我创建了变量 bpJson,但我不明白它为什么会改变。我每 5 秒控制台记录一次,每次迭代都会改变。我只希望 babyPieData 改变而 bpJson 每次都保持不变。setPieOptions 中没有 bpJson,所以我没有包含该函数的代码。
var createVariance = function(bpJson, babyPieData){
var n = bpJson.length;
for ( var i = 0; i < n; i++){
var amount = Math.floor(Math.random() * 4);
var operator = Math.floor(Math.random() *2) + 1;
if (operator === 1){
babyPieData[i] = (bpJson[i] + amount);
if (babyPieData[i] > 100){
babyPieData[i] = 100;
}
}else{
babyPieData[i] = (bpJson[i] - amount);
if (babyPieData[i] < 0){
babyPieData[i] = 1;
}
}
setPieOptions(babyPieData);
}
};
var getBabyPieData = …Run Code Online (Sandbox Code Playgroud) 我正在为学校创建一个小游戏,我正在创建一个由 100 个图块组成的棋盘,它们是 JS 对象。其中一些图块被随机阻挡(这是它们的属性之一)。玩家不能进去。
我还需要在这些图块上随机放置 4 个武器。
所以我创建了一系列未被阻挡的图块,然后我将我的武器一个接一个地放在这些空闲图块上。为了确保其中一个图块上还没有武器,我使用 .filter() 创建一个新的未阻塞且空的图块数组(没有武器)。
问题是,当我更新新数组中的图块属性时(由 .filter 发出,以确保同一位置不会有两个武器),它会更新父数组中图块的属性,我不明白这一点。我读过 .filter() 方法不会更新父数组,但在这里它会更新?也许是因为它是一个 JS 对象?
感谢您的澄清!
let tilesUnblocked = []
//here function creating tiles and pushing unblocked tiles in the array above
for (i = 0; i < weapons.length; i++) {
let tilesUnblockedAndEmpty = tilesUnblocked.filter(tile => tile.weapon === false)
let randomInt = Math.round(tilesUnblockedAndEmpty.length * Math.random())
let weaponElt = weapons[i].HTMLElement
weaponElt.css({ //some css })
tilesUnblockedAndEmpty[randomInt].HTMLElement.append(weaponElt)
tilesUnblockedAndEmpty[randomInt].weapon = true //updating array created from filter
tilesUnblockedAndEmpty[randomInt].weaponType = weapons[i].name //updating array …Run Code Online (Sandbox Code Playgroud)