将对象从一个函数传递到另一个函数是否需要特殊措施?我是面向对象的JavaScript的新手,所以如果有一个简单的修复,请原谅我。 以下是我遇到的问题的示例代码。
function foo {
var x = 0;
var y = 0;
/* this is the JavaScript Object that is passed in
cell = {
left: {x: someInt, y: someInt},
up: {x: someInt, y: someInt},
right: {x: someInt, y: someInt},
down: {x: someInt, y: someInt},
x: someInt,
y: someInt
}
*/
this.turn = function(cell){
console.log(cell);
processNeighbors(cell);
smartMove(x,y, cell);
function smartMove(x,y,cell) {
// make a smart decision
}
function processNeighbors(x, y, cell) {
console.log(cell); // this is the line of the undefined error
// process all neighbors
}
}
我预计两个输出都是相同的,但是processNeighbors
函数中的console.log()返回一个有效的响应,而bar
函数返回一个'无法读取的属性“值”未定义的。
因此,当一个对象从一个函数传递到另一个函数时,它是否超出范围?我不会在任何函数中更改对象本身。
答案 0 :(得分:2)
再次查看您的代码:
public class MapView extends SupportMapFragment
implements OnMapReadyCallback {
private GoogleMap mMap;
private Marker marker;
public MapView() {
}
@Override
public void onResume() {
super.onResume();
setUpMapIfNeeded();
}
private void setUpMapIfNeeded() {
if (mMap == null) {
getMapAsync(this);
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
setUpMap();
}
private void setUpMap() {
mMap.setMyLocationEnabled(true);
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
mMap.getUiSettings().setMapToolbarEnabled(false);
}
}
function processNeighbors(x, y, cell) {
console.log(cell); // this is the line of the undefined error
// process all neighbors
}
在函数范围内创建var processNeighbors
。 (第三个论点)
因此,当您的函数为单元格并且cell
和processNeighbors(cell);
参数未定义时,请致电x
y
参数。
从参数中删除cell
:
cell
或使用正确的参数调用它:
function processNeighbors(x, y) {
console.log(cell);
}
// or - if that was the intended way to call the function
function processNeighbors(cell) {
console.log(cell);
}
我没有评论您的代码中的任何其他错误,因为我认为这些只是复制和放大粘贴错误。
作为一个非常简单的例子:
processNeighbors(x,y,cell);