Javascript 如何访问不同对象的函数

Javascript 如何访问不同对象的函数,javascript,Javascript,我有以下代码- function test() { a = { name : 'John', greeting : 'Hello', sayIt : function() { return this.greeting + ', ' + this.name + '!'; } }; b

我有以下代码-

function test() {
        a = {
            name : 'John',
            greeting : 'Hello',
            sayIt : function() {
                return this.greeting + ', ' +
                    this.name + '!';
            }
        };

        b = {
            name : 'Jane',
            greeting : 'Hi'
        };
}

如何使用b访问sayIt?当然,b说这行不通。我需要打印“嗨,简”。如何将b的名称和问候语传递给sayIt函数?

您可以使用
apply
call

a.sayIt.apply(b);

这些更改了
this

的值。您需要从函数返回
a
b
。然后你可以这样做:

function test() {
  var a = {
    name : 'John',
    greeting : 'Hello',
    sayIt : function() {
      return this.greeting + ', ' +
      this.name + '!';
    }
  };

  var b = {
    name : 'Jane',
    greeting : 'Hi'
  };

  return this;
}

test().a.sayIt.call(test().b); // Hi Jane!
您也可以使用

b = new a();
b.name = 'Jane',
b.greeting = 'Hi'
b.sayIt();
使用:


像a.sayIt()?或者一个[“说”]?是的。但是我需要做一些像b.sayIt()这样的事情。有可能做一个b.a.sayIt()吗?除非你想
a
b
是全局的,你应该
var
它们。看起来更像
sayIt
函数根本不应该是对象的一部分,而是一个带参数的常规函数。从结构的角度来看,代码没有多大意义,但是,函数名为“test”。对我来说,最合理的做法是将对象设置为“person”,在其原型上设置sayIt方法,并在实例化时设置属性。
a.sayIt.apply(b)