作为参数传递的对象的JavaScript调用方法

时间:2017-06-24 03:22:08

标签: javascript oop object

JavaScript新手。我试图将一个对象的方法作为参数传递给另一个方法。我不断得到参数为null或参数没有名为x的方法的错误。

在像c#这样的强类型语言中你可以这样做

public class Context 
{
  public void moveTo(int x, int y) {...}
  public void lineTo(int x, int y) {...}
}
public class Square
{
  public void draw(Context c, int x, int y) {
    c.moveTo(x,y);
    c.lineTo(x+10,y+5); //etc
  }
}
public class Design
{
  ctx = new Context();
  s = new Square();
  s.draw(ctx,5,10);
}

而不是Square,我画了一些更复杂的东西。 但是在我尝试使用Javascript时,当它编译时会在绘制中得到一个错误,即c为null,没有方法lineTo。

这样做的Javascript方式是什么?

2 个答案:

答案 0 :(得分:1)

好吧,在JavaScript中你可以这样做:     

let sum = {
  operation: (a, b) => a + b
};

let minus = {
 operation: (a, b) => a - b
};

let obj = {
 applyOperation: (obj, a, b) => obj.operation(a, b)
};

obj.applyOperation(sum, 1, 2);    // => 3
obj.applyOperation(minus, 1, 2);  // => -1

如果你传递一个空对象({}),你会收到一个TypeError例外,在这种情况下会是这样的:TypeError: obj.operation is not a function

答案 1 :(得分:0)

埃尔顿是对的。我的问题是javascript允许的if语句中的赋值,就像C一样(我已经习惯了C#的预防)以及对Chrome调试的不熟悉,因为它是运行时错误而不是编译错误。

该实际错误消息为:

Uncaught TypeError: Cannot read property 'moveTo' of null