相关疑难解决方法(0)

使用Object.create()和使用赋值运算符有什么区别?

这里有一些例子.

// 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中数据对象被覆盖?

javascript prototypal-inheritance ecmascript-5

0
推荐指数
1
解决办法
1524
查看次数

如何定义变量类型的数组对象的新对象?

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

javascript

0
推荐指数
1
解决办法
126
查看次数

使用删除属性而不影响父对象

这是两个名为和 的对象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

javascript

0
推荐指数
1
解决办法
321
查看次数

为什么我的变量的副本被意外更改?

我创建了变量 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)

javascript

0
推荐指数
1
解决办法
108
查看次数

javascript:.filter 更新原始数组中的对象?

我正在为学校创建一个小游戏,我正在创建一个由 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)

javascript arrays for-loop object filter

0
推荐指数
1
解决办法
1820
查看次数