javascript:动态生成的对象名称的call方法

时间:2018-05-29 13:23:48

标签: javascript

如何在动态生成的名称上调用方法?这是我将对象名称传递给函数并在该对象上调用方法的情况。像这样的东西,其中type是我想要执行方法的对象的名称:

function doSomething(type) {
    type.someMethod();
}

请注意,我不想将对象传递给函数。

4 个答案:

答案 0 :(得分:1)

如果您的对象是全局的,您可以这样做:

<?php
#footer block
$footer_title = get_post_meta($post->ID, '_cmb_footer_block_title', true);
$footer_content = apply_filters('the_content', get_post_meta($post->ID, '_cmb_footer_block_text', true)); ?>
<div class="col-xs-12 col-sm-6 col-md-3 footer-col-1">
<h2 class="footer-title"><?php echo $footer_title; ?></h2>
<?php echo $footer_content; ?>
</div> ?>

答案 1 :(得分:1)

首先,不清楚“类型”属于哪个对象。我猜这是在范围内,也许是这样的:

var typeObjects = {
    type1: {
      doSomething: function(){..},
      ..
    },
    type2: {
      doSomething: function(){..},
      ..
    },
    ..
}

然后,您的功能将变为以下内容:

function doSomething(typeName) {
    typeObjects[typeName].someMethod();
}

然后你会这样称呼它:

doSomething('type1');

答案 2 :(得分:0)

您需要评估对象名称或方法。

eval(type)['someMethod']();

eval(type + '.someMethod()');

此外,如果您的对象位于 window 范围内,则可以执行

window[type].someMethod();

答案 3 :(得分:0)

如果要将变量名称传递给函数,请考虑传递预定对象的属性名称,以便您的函数不会使用eval()从其作用域中不安全地访问任意对象,这是一个错误出于安全和性能原因进行练习。

&#13;
&#13;
var myObject = {
  foo: { someMethod () { console.log('fooObj') } },
  bar: { someMethod () { console.log('barObj') } }
}

function doSomething (property) {
  if (myObject.hasOwnProperty(property)) {
    myObject[property].someMethod()
  }
}

doSomething('foo')
doSomething('bar')
doSomething('nil') // does nothing
&#13;
&#13;
&#13;