gpt4 book ai didi

javascript - 通过测试了解 javascript 变量范围

转载 作者:行者123 更新时间:2023-12-02 17:15:39 24 4
gpt4 key购买 nike

我正在尝试测试 Map 类。我的类有一个方法 getCenter() 返回 {x:0,y:0}。另外,我想让 {x:1,y:0} 调用 getRight() 并且我仍然希望 getCenter() 返回 {x:0,y:0}。

var assert = require('assert')
, Map = require('../lib/map')

describe('Map()', function () {
describe('#getCenter()', function () {
it('should return [0,0] by default', function () {
var map = new Map()
assert.deepEqual({x: 0, y: 0}, map.getCenter())
})
})
describe('#getRight()', function () {
it('should return [1,0] by default', function () {
var map = new Map()
assert.equal(1, map.getRight().x)
assert.deepEqual({x: 0, y: 0}, map.getCenter())
})
})
})

但我做错了什么:

var Map = function () {
this.center = {x: 0, y: 0}
}

module.exports = Map

Map.prototype.getCenter = function () {
return this.center
}

Map.prototype.getRight = function () {
var new_position = this.center
new_position.x += 1
return new_position
}

我不想改变 this.center。如何创建新变量?我不明白“this.center”的范围。我不会更改该变量。

最佳答案

因为 javascript 基于 C 并且很疯狂,将变量分配给对象实际上将其设置为指向该对象的指针(这也适用于数组,这就是为什么您需要调用 var b = a.因此,您需要克隆该对象(这很难做好: How do I correctly clone a JavaScript object? )或直接将新变量设置为属性:
返回 {x: this.center.x + 1, y: this.center.y}

关于javascript - 通过测试了解 javascript 变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24468946/

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