精华内容
下载资源
问答
  • 用eval方法,把传进来的这个方法名所代表的方法当作一个对象来赋值给method1的func属性,需要的朋友可以参考下
  • ...eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。 function a(){} eval('a')();//执行方法a 转载于:https://my.oschina.net/u/2998098/blog/2967260

    eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

    function a(){}

    eval('a')();//执行方法a

    转载于:https://my.oschina.net/u/2998098/blog/2967260

    展开全文
  • javascript根据方法名调用方法

    千次阅读 2018-12-24 20:27:36
    //根据方法名调用方法 function callModelFun(functionName){ //根据函数名得到函数类型 var func=eval(functionName); //创建函数对象,并调用 new func(); } 推荐一个公众号 号主为一线大厂架构师,CSDN...

     

    //根据方法名调用方法
    function callModelFun(functionName){
        //根据函数名得到函数类型
        var  func=eval(functionName);
        //创建函数对象,并调用
        new func();
    }

     

    推荐一个公众号

    号主为一线大厂架构师,CSDN博客专家,博客访问量突破一千万。主要分享Java、golang架构,源码,分布式,高并发等技术,用大厂程序员的视角来探讨技术进阶、面试指南、职业规划等。15W技术人的选择!

    展开全文
  • 主要介绍了javascript实现根据函数名称字符串动态执行函数的方法,结合实例形式分析了JS函数的判断及函数动态调用相关操作技巧,需要的朋友可以参考下
  • JAVA执行javascript方法

    万次阅读 2016-04-02 23:20:49
    之前在一次机缘巧合的情况下,需要时用JAVA执行js方法,查阅了一些文档,找到了相关解决方法,这里和大家分享一下。

    之前在一次机缘巧合的情况下,需要时用JAVA执行js方法,查阅了一些文档,找到了相关解决方法,这里和大家分享一下。
    在JDK1.6中为我们提供了一个ScriptEngineManager类,ScriptEngineManager 为 ScriptEngine 类实现一个发现和实例化机制,还维护一个键/值对集合来存储所有 Manager 创建的引擎所共享的状态。此类使用服务提供者机制枚举所有的 ScriptEngineFactory 实现。
    ScriptEngineManager 提供了一个方法,可以返回一个所有工厂实现和基于语言名称、文件扩展名和 mime 类型查找工厂的实用方法所组成的数组。
    键/值对的 Bindings(即由管理器维护的 “Global Scope”)对于 ScriptEngineManager 创建的所有 ScriptEngine 实例都是可用的。Bindings 中的值通常公开于所有脚本中。

    通过上面的描述,我们就应该知道了,需要时用到的类为ScriptEngineManagerScriptEngine

    我们先来看一下ScriptEngineManager

    构造方法如下:

    方法名说明
    ScriptEngineManager()如果调用者可访问线程上下文 ClassLoader,则调用此构造方法的效果与调用 ScriptEngineManager(Thread.currentThread().getContextClassLoader()) 相同
    ScriptEngineManager(ClassLoader loader)此构造方法使用服务调用者机制加载对于给定 ClassLoader 可见的 ScriptEngineFactory 实现

    方法摘要如下:

    返回值方法名说明
    Objectget(String key)获取 Global Scope 中指定键的值
    BindingsgetBindings()getBindings
    ScriptEnginegetEngineByExtension(String extension)查找并创建一个给定扩展的 ScriptEngine
    ScriptEnginegetEngineByMimeType(String mimeType)查找并创建一个给定 mime 类型的 ScriptEngine
    ScriptEnginegetEngineByName(String shortName)查找并创建一个给定名称的 ScriptEngine
    List<ScriptEngineFactory>getEngineFactories()返回一个数组,该数组的元素是发现机制找到的所有 ScriptEngineFactory 类的实例
    voidput(String key, Object value)设置 Global Scope 中指定的键/值对
    voidregisterEngineExtension(String extension, ScriptEngineFactory factory)注册一个 ScriptEngineFactory 来处理扩展
    voidregisterEngineMimeType(String type, ScriptEngineFactory factory)注册一个 ScriptEngineFactory 来处理 mime 类型。
    voidregisterEngineName(String name, ScriptEngineFactory factory)注册一个ScriptEngineFactory 来处理语言名称
    voidsetBindings(Bindings bindings)setBindings 存储 globalScope 字段中的指定 Bindings

    我们首先来看一下,JDK为我们提供了哪些可用的脚本引擎工厂,写一段代码测试一下:

    @Test
    public void getScriptEngineFactory()
    {
       ScriptEngineManager manager = new ScriptEngineManager();
       List<ScriptEngineFactory> factories = manager.getEngineFactories();
       for (ScriptEngineFactory factory : factories)
       {
          System.out.println(factory.getNames());
       }
    }

    运行结果如下:

    [nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript]

    通过控制台输出的结果,我们知道JDK已经为我们实现了js相关的脚本引擎,我们直接使用就可以了,解决了引擎的问题,下面我们再来看看脚本引擎如何使用,这就需要ScriptEngine了。

    ScriptEngine 是基础接口,该接口的方法在此规范的每个实现中都必须具有完整的功能。
    这些方法提供基本的脚本功能。为这个简单接口编写的应用程序应该对每个实现稍做修改就能够运行。这包括执行脚本的方法,以及设置和获取值的方法。
    这些值是两种类型的键/值对。组成第一种类型的键/值对中的键是此规范或个别实现中保留和定义的键。包含保留键的键/值对中的值具有指定的含义。
    另一种类型由那些创建 Java 语言 Bindings 的键/值对组成,值通常通过相应键或其装饰的形式用脚本表示。

    方法摘要如下:

    返回值方法名说明
    BindingscreateBindings()返回一个未初始化的 Bindings
    Objecteval(Reader reader)除了脚本的源是以 Reader 形式提供的外,与 eval(String) 相同
    Objecteval(Reader reader, Bindings n)除了脚本的源是以 Reader 形式提供的外,与 eval(String, Bindings) 相同
    Objecteval(Reader reader, ScriptContext context)与 eval(String, ScriptContext) 相同,其中脚本的源是从 Reader 读取的
    Objecteval(String script)执行指定的脚本
    Objecteval(String script, Bindings n)执行脚本,脚本执行期间使用 Bindings 参数作为 ScriptEngine 的 ENGINE_SCOPE Bindings
    Objecteval(String script, ScriptContext context)立即执行脚本,该脚本的源是作为第一个参数传递的 String
    Objectget(String key)获取在此引擎的状态中设置的值
    BindingsgetBindings(int scope)返回指定值的范围
    ScriptContextgetContext()返回 ScriptEngine 的默认 ScriptContext,在没有指定 ScriptContext 时,该 ScriptEngine 的 Bindings、Reader 和 Writer 被用于脚本执行
    ScriptEngineFactorygetFactory()返回此 ScriptEngine 所属的类的 ScriptEngineFactory
    voidput(String key, Object value)设置 ScriptEngine 的状态中的键/值对,它创建一个将在脚本执行中使用或者以其他方式使用的 Java Language Binding,具体取决于该键是否被保留
    voidsetBindings(Bindings bindings, int scope)设置将由脚本使用的指定值的范围。
    voidsetContext(ScriptContext context)设置 ScriptEngine 的默认 ScriptContext,在没有指定 ScriptContext 时,该 ScriptEngine 的 Bindings、Reader 和 Writer 被用于脚本执行

    下面我们通过代码来演示具体的使用方法

    首先我们先来看一下如何执行一段简单的js表达式:

    @Test
    public void invokeExpression() throws ScriptException
    {
       ScriptEngineManager manager = new ScriptEngineManager();
       ScriptEngine engine = manager.getEngineByName("js");
       String js = "1 + 2";
       Integer result = (Integer) engine.eval(js);
       System.out.println(result);
    }

    通过这段代码,我们很容易的就实现了java执行js的一段表达式。
    在java中,我们不仅可以运行js的表达式,我们还可以执行js函数

    @Test
    public void invokeFunction() throws ScriptException, NoSuchMethodException
    {
       ScriptEngineManager manager = new ScriptEngineManager();
       ScriptEngine engine = manager.getEngineByName("js");
       String js = "function welcom(){return 'welcom';}";
       engine.eval(js);
       Invocable invocable = (Invocable) engine;
       String result = (String) invocable.invokeFunction("welcom");
       System.out.println(result);
    }

    这里我们用到了Invocable接口,Invocable由 ScriptEngines 实现的可选接口,该 ScriptEngines 的方法允许在以前执行过的脚本中调用程序。当然啦,我们不仅能执行函数,还可以传递参数:

    @Test
       public void invokeFunctionWithParam() throws ScriptException, NoSuchMethodException
    {
       ScriptEngineManager manager = new ScriptEngineManager();
       ScriptEngine engine = manager.getEngineByName("js");
       String js = "function welcom(name){return 'welcom ' + name;}";
       engine.eval(js);
       Invocable invocable = (Invocable) engine;
       String result = (String) invocable.invokeFunction("welcom", "jianggujin");
       System.out.println(result);
    }

    除此之外,我们还可以将java对象注入到js代码中运行:

    @Test
    public void inject() throws ScriptException, NoSuchMethodException
    {
       ScriptEngineManager manager = new ScriptEngineManager();
       ScriptEngine engine = manager.getEngineByName("js");
       Date date = new Date();
       System.out.println(date.getTime());
       engine.put("date", date);
       String js = "function getTime(){return date.getTime();}";
       engine.eval(js);
       Invocable invocable = (Invocable) engine;
       Long result = (Long) invocable.invokeFunction("getTime");
       System.out.println(result);
    }

    是不是很神奇呢?下面再介绍一种更神奇的,java通过线程启动js函数:

    public void runThread() throws ScriptException, NoSuchMethodException
    {
       ScriptEngineManager manager = new ScriptEngineManager();
       ScriptEngine engine = manager.getEngineByName("js");
       engine.put("out", System.out);
       String js = "var obj=new Object();obj.run=function(){out.println('thread...')}";
       engine.eval(js);
       Object obj = engine.get("obj");
       Invocable inv = (Invocable) engine;
       Runnable r = inv.getInterface(obj, Runnable.class);
       Thread t = new Thread(r);
       t.start();
    }

    好了,到这里java运行js的方法已经介绍的差不多了,下面贴出完整的测试代码:

    import java.util.Date;
    import java.util.List;
    
    import javax.script.Invocable;
    import javax.script.ScriptEngine;
    import javax.script.ScriptEngineFactory;
    import javax.script.ScriptEngineManager;
    import javax.script.ScriptException;
    
    /**
     * 运行javascript
     * 
     * @author jianggujin
     *
     */
    public class RunJavascript
    {
    
       public void getScriptEngineFactory()
       {
          ScriptEngineManager manager = new ScriptEngineManager();
          List<ScriptEngineFactory> factories = manager.getEngineFactories();
          for (ScriptEngineFactory factory : factories)
          {
             System.out.println(factory.getNames());
          }
       }
    
       public void invokeExpression() throws ScriptException
       {
          ScriptEngineManager manager = new ScriptEngineManager();
          ScriptEngine engine = manager.getEngineByName("js");
          String js = "1 + 2";
          Integer result = (Integer) engine.eval(js);
          System.out.println(result);
       }
    
       public void invokeFunction() throws ScriptException, NoSuchMethodException
       {
          ScriptEngineManager manager = new ScriptEngineManager();
          ScriptEngine engine = manager.getEngineByName("js");
          String js = "function welcom(){return 'welcom';}";
          engine.eval(js);
          Invocable invocable = (Invocable) engine;
          String result = (String) invocable.invokeFunction("welcom");
          System.out.println(result);
       }
    
       public void invokeFunctionWithParam() throws ScriptException, NoSuchMethodException
       {
          ScriptEngineManager manager = new ScriptEngineManager();
          ScriptEngine engine = manager.getEngineByName("js");
          String js = "function welcom(name){return 'welcom ' + name;}";
          engine.eval(js);
          Invocable invocable = (Invocable) engine;
          String result = (String) invocable.invokeFunction("welcom", "jianggujin");
          System.out.println(result);
       }
    
       public void inject() throws ScriptException, NoSuchMethodException
       {
          ScriptEngineManager manager = new ScriptEngineManager();
          ScriptEngine engine = manager.getEngineByName("js");
          Date date = new Date();
          System.out.println(date.getTime());
          engine.put("date", date);
          String js = "function getTime(){return date.getTime();}";
          engine.eval(js);
          Invocable invocable = (Invocable) engine;
          Long result = (Long) invocable.invokeFunction("getTime");
          System.out.println(result);
       }
    
       public void runThread() throws ScriptException, NoSuchMethodException
       {
          ScriptEngineManager manager = new ScriptEngineManager();
          ScriptEngine engine = manager.getEngineByName("js");
          engine.put("out", System.out);
          String js = "var obj=new Object();obj.run=function(){out.println('thread...')}";
          engine.eval(js);
          Object obj = engine.get("obj");
          Invocable inv = (Invocable) engine;
          Runnable r = inv.getInterface(obj, Runnable.class);
          Thread t = new Thread(r);
          t.start();
       }
    
       public static void main(String[] args) throws NoSuchMethodException, ScriptException
       {
          new RunJavascript().runThread();
       }
    
    }
    展开全文
  • 本文实例分析了javascript针对不确定函数的执行方法。分享给大家供大家参考,具体如下: 在javascript中,有时候只知道一个函数的名字,但并不确定该函数有没有,如何判断该函数是否存在,并执行呢。一个方法是用...
  • 先看看JS的一个函数 JavaScript eval() 函数 定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。 语法 eval(string) 参数 描述 string 必需。要计算的字符串,其中...
  • 但是当打开浏览器的开发者工具(Developer Tool)之前,这个方法无论如何都不会执行,而且控制台也没有任何错误信息。 博主找遍了国内外各大论坛都无果,大多数找到的问题根源都是在JavaScript function中使用了...

    问题描述:

    页面有一个复选框(checkbox),点击该复选框时,这个表格中的所有复选框都选中,取消选中时,所有的都取消选中。

    但是当打开浏览器的开发者工具(Developer Tool)之前,这个方法无论如何都不会执行,而且控制台也没有任何错误信息。

    博主找遍了国内外各大论坛都无果,大多数找到的问题根源都是在JavaScript function中使用了console方法,因为console对象只有在开发者模式下才会被创建。但是这个案例中没有任何代码直接或者间接的调用到了console。

    直到看到 chunlynn 博主的博客

    JS异常处理:Uncaught TypeError: xxx is not a function at HTMLAnchorElement.onclick

    问题分析:

    函数名不能和页面的某个标签的id名相同。一些浏览器可以通过在js代码中指定ID访问节点元素,然后定义的函数就会被DOM中的元素覆盖了。如果出现这种情况,就需要重命名函数名称或元素ID。

     

    看到这里,好像前端代码中确实有一个元素的id和这个js方法名字一样。

    果不其然,贴上代码:

    前端元素代码:

    <input type="checkbox" name="checkAll" onclick="checkAll(form)"/>

    js 代码: 

    function checkAll(form){
    	var d=document.getElementsByTagName("input");
    	for (i=0;i<d.length;i++){
    		if (d[i].type == 'checkbox'){
    			if (d[i].name != 'name'){
    				d[i].checked = form.checkBox.checked;
    			}
    		}
    	}

    修改id或者方法的名字,保证2者不同,fix。

     

    总结:

    函数名不能和页面的某个标签的id名相同。一些浏览器可以通过在js代码中指定ID访问节点元素,然后定义的函数就会被DOM中的元素覆盖了。如果出现这种情况,就需要重命名函数名称或元素ID。

    展开全文
  • 本篇将带你走进JavaScript遍历的世界, 享受分析JS循环的快感. 本篇所有代码都可以直接运行, 希望您通读本篇后, 不止是浏览, 最好是亲手去实践下. 概述 js有如下两种数据需要经常遍历 数组(Array) 对象(Object) ...
  • load是自动执行方法名 <body onload="load();"> </body> 2、在JS语句调用: <script type="text/javascript"> function load() { alert("自动执行load()"); } ...
  • csdn大自然搬运测试当方法,演示如下:   function funName(a,b){return a+b}; undefined eval("funName")(1,2) 3 eval("funName(2,3)") 5 window["funName"](3,4) 7 var f=new...
  • JS中,作用域是通过函数来划分的,将JS代码封装到函数中进行调用可以避免变量/函数冲突的问题,但是这也并不是万无一失,因为封装函数本身有可能和其它函数重名,解决方案:自执行函数。 自执行函数是用一对圆...
  • 以下代码实现JavaScript执行MessageDialog方法成功后,执行回调方法MessageDialogCallBack //m_int_type:1 正确,2错误,3警告,4提醒 function MessageDialog(m_int_icon, m_str_...
  • C# WebBrowser执行自定义JS方法

    千次阅读 2014-05-22 14:01:48
    /// /// 执行自定义JS函数 /// /// 要操作的WebBrowser的页面对象 /// 自定义JS函数 /// 自定义JS函数 /// public string ExecJS(HtmlDocument Doc,string JsFun,string FunNanme
  • JS动态调用方法名

    千次阅读 2013-12-18 12:01:59
    先看看JS的一个函数 JavaScript eval() 函数 定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。 语法 eval(string) 参数 描述 string 必需。要计算的字符串,其中...
  • javascript中如何延迟执行一个方法

    千次阅读 2013-05-05 03:10:36
    function test() { alert("test"); } setTimeout(test, 1000); 其中,setTimeout为延迟执行方法,是JS原生的方法 第一个参数为函数,第二个参数为延迟时间,单位毫秒
  • JS中,作用域是通过函数来划分的,将JS代码封装到函数中进行调用可以避免变量/函数冲突的问题,但是这也并不是万无一失,因为封装函数本身有可能和其它函数重名,解决方案:自执行函数。自执行函数是用一对圆...
  • function alertFunc(str1,str2,str3){  alert(str1);  alert(str2);  alert(str3);  }    function callAlert(functionName){  var func=eval(functionName);  new func
  • js setInterval第一次执行时存在延迟的解决方法 在使用setInterbal(function,delayTime)方法时,发现它会为函数的第一次调用也做延迟。一般我们都是第一次立即调用,然后延迟调用。我的解决方法如下: 需要延迟...
  • js中让程序自动执行方法

    千次阅读 2018-06-21 20:07:47
    最近在做影院项目是遇到了一个问题---不能将播放界面的title设置为正在播放的... 一直在想,怎么在程序中加个代码能够让程序自动执行,将title的内容换为包含视频的。今天在搜狗上搜到了一篇文章,介绍了三种方...
  • js 把字符串当函数执行方法

    千次阅读 2017-09-20 10:20:06
    eval方法—用来执行字符串代表的 javascript 代码。 如果传递的不是字符串的话,会直接返回传值,而非调用。 例如: function test(str){ alert(str); } //如果param是值; eval('test("param")'); //如果param...
  • 浏览器中根据js的方法,查看方法以及所在路径查看js方法以及...根据某个js方法名,查看其内容 ; 以火狐浏览器为例,查看js方法correctDoc和recordLog方法的是如何定义的。 打开控制台输入一下语句: javascript:al...
  • 1.参数为方法名 e.g : //写一个方法 function fun(){ alert('fun方法被执行'); } this.hello('fun'); hello的实现: /* * 参数 fun 为方法名称 */ function hello(fun){ ...
  • Java 调用某一 js 文件中的方法,获得执行结果
  • 在mvc中,JavaScriptResult可非常简单的实现在action返回时执行一段后端写的js脚本或者调用前端的js方法,具体如下。 1.在后端编写并执行js脚本 // 在后端编写并执行js方法showMsg protected ActionResult Close...
  • javascript中有多种方法可以让一段字符串当做一段js代码来执行: 使用eval("要执行的字符串")使用new Function("要执行的字符串")setTimeOut("要执行的字符串",500)setInterval("要执行的字符串",500)
  • 比如传入一个 fname这个参数,并且想要执行参数对应的的函数,可以使用eval()函数。 function log(){ console.log('log') } let fname = log; fname() // 这样肯定报错 eval(fname+'()') // 执行这个字符串 // log...
  • js定时器 延时执行 循环执行

    千次阅读 2016-09-25 08:30:05
    本文概述:本文主要介绍通过JS实现定时定点执行,在某一个固定时刻执行某个函数的方法。比如说在下一个整点执行,在每一个整点执行,每隔10分钟定时执行方法JavaScript中有两个定时器方法:...
  • javascript中,如何将函数名字符串转变为函数并执行?“用 eval ”,西蒙说。咋弄呢?类似地:var mess = "hello world!"; var func = "alert"; var f = eval(func + "(mess);");//hello world!可以写得复杂点:var ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 398,945
精华内容 159,578
关键字:

js根据方法名执行