【问题标题】:Invoke a method in an Object that was created inside a function调用在函数内部创建的对象中的方法
【发布时间】:2017-11-15 04:41:09
【问题描述】:

我对这个问题感到困惑,甚至 JavaScript MDN 都没有为我澄清这个概念。

有一个名为 invokeMethod 的函数,在该函数中我必须创建一个对象。对象包括一个方法。我需要使用方括号表示法调用对象中的方法,但不需要返回任何内容。

这是问题和我的代码。当我尝试调用函数括号中的方法时,我不断收到错误消息。

问题:method 是一个字符串,其中包含对象上的方法名称 使用括号表示法调用此方法。 无需退货。

输入示例:

{ foo: function() {} }, 'foo'

我的代码:

function invokeMethod(object, method) {
  // code here
  const obj = {
    name: 'kung',
    foo: function(){
      console.log('foo');
    }
  };
}

invokeMethod(obj[foo]);

【问题讨论】:

  • in invokeMethod(obj[foo]); 变量obj 是什么,变量foo 是什么?你的 invokeMethod 函数有两个参数,你用一个来调用它,这并不重要,因为你在代码中没有使用任何参数

标签: javascript function object methods


【解决方案1】:

检查是否有帮助。

function invokeMethod(object, method) {
  // object definitions
  const obj = {
    name: 'kung',
    foo: function(){
      console.log('foo');
    }
  };

  // conditional invokation 
  switch(object){
    case "obj":
      if(typeof obj[method] == "function") return obj[method]();
    default:
      console.log("Given object not found!");
    }  
}
// call method
invokeMethod("obj", "foo");

***如果对象本身作为参数传递:

function invokeMethod(object, method) {
	if(typeof object[method] === "function")	
		object[method]();
	else
		console.log('Invalid function name!');
  }
  
  invokeMethod({ foo: function() {console.log('foo');} }, 'foo');

【讨论】:

  • 这里你会直接得到不可访问的对象,你可以通过invokeMethod()调用它们里面的方法。
  • 我认为你需要在这里改变一些东西。我的意思是,当然,查询有效,但在实时执行中,他需要提供一个 obj 并查看该对象中的函数。如果我看到你的代码,你总是在 obj const 中返回函数,而不是 object 参数。
  • 是的@KenrySanchez,我想我错过了那部分,感谢您指出这一点。我已经更新了我的答案。干杯。
【解决方案2】:

也许这会有所帮助。

看看你的函数我看到你有两个元素objectmethod作为参数。所以,你的功能这样做很糟糕

function invokeMethod(object, method) {
  // code here
  const obj = {
    name: 'kung',
    foo: function(){
      console.log('foo');
    }
  };
}

如果你要收到obj-function,你应该有这个,

function invokeMethod(method)

现在,按照您的示例,我认为您确实希望收到obj-function。所以,在这种情况下,你应该这样做。

const obj = {
    name: 'kung',
    foo: function(){
      console.log('foo');
    }
  };

function invokeMethod(obj, method) {
  if((method in obj) && typeof obj[method] ==="function"){

    return obj[method]();
  }
}

invokeMethod(obj, 'foo');

【讨论】:

  • 成功了!您能否向我解释/澄清您是如何达到此解决方案的?尤其是 IF 语句?这真的有助于我的理解,因为我正在自学 Javascript。
  • 当然。您正在寻找对象的方法,因此您必须进行查询。这个查询很简单,为此,您使用 if 语句。进入if 有两个操作,(method in obj)typeof obj[method] ==="function"in 运算符用于了解对象具有属性,在本例中为方法。 typeof 用于了解类型属性。它将类型作为字符串返回,因此您必须知道该类型是否为function。最后一步是用括号符号返回您要查找的函数。
猜你喜欢
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 2017-04-17
相关资源
最近更新 更多