如何在js函数中调用另外一个函数

JavaScript012

如何在js函数中调用另外一个函数,第1张

首先把这两个函数都定义数来。

定义被调用函数(这类函数一般都是一个公用函数,如果不是公用可以和调用函数写在一起)。

    // 被调用的公共函数 act为需要的参数,自己定义就可

    function publicMethod(act1,atc2){

      // 实现逻辑

    }

3.定义调用函数

    // 调用的函数 act为需要的参数,自己定义就可

    function callMethod(act1,atc2){

      // 如果有返回值,可以定义一个变量进行赋值

      var ret = publicMethod(act1,atc2)

      // 下面逻辑处理

    }

代码我已经帮你写好了,你大概可以看下,希望你能看的明白:

//这两句是我为了测试你的代码而创建的模拟对象,否则程序不运行var VMM = new Object()

VMM.Timeline = new Object()

//这里定义的匿名函数,你未实际运行起来,所以函数内定义的任何东西,都无法生效。(function(){

VMM.Timeline.TimeNav = function(a, b, c){

function I(){

alert("onConfigSet")

}

this.I = I//加一句属性声明,将自身的函数,经由 xx.I 的方式来调用

}

})()//于后面加个()表示执行匿名函数

//测试执行,定义变量。var d = new VMM.Timeline.TimeNav()

d.I()

===============

你一定要记得一点,任何函数function,如果内部有定义变量或属性,都必须先保证这个function被正确执行了,其内部声明的变量或属性,才会生效,例如:

var d = 0

function dd(){ d = 3 }

如果dd未 运行,d的变量是不会被改变的。

=============

再扩展一点说,函数要运行,有几种办法:

function s(){ d=4 } s()最简单的函数定义及运行

(function(){ d = 4 })()注意后面的扩号,表示执行前面的扩号内的函数体

var s = new function(){ d=3 }//定义一个匿名函数,运行后,再交给S

js中的函数有两种调用方式,一种是通过普通的声明之后进行的调用。一种是通过new关键字进行构造调用。普通的调用就是依次执行函数内部的函数语句,如果有返回值则返回返回值,如果没有则函数内部的声明周期结束。但是,函数还有另一个调用方式,使用new关键字,将函数当做构造函数。js中没有所谓独立出来的构造函数的概念,所有的函数都用同样的方式声明,所以有了new这个关键字,js(ES6之前)只能通过这种方式实现构造器的构造。那么使用new关键字跟普通的调用有什么区别呢?

使用new关键字,比普通的函数调用,主要分为以下四个步骤:

稍后我们会对上面的四句话逐一解析,首先我们看一看函数调用的两种方式:

这样看来,两者似乎没有区别,但是这里要注意,使用new进行构造调用时,函数是有返回值的。

上面的return2并没有返回一个函数。

其实它会返回一个空的对象。这也就是上面使用new关键词的第一步, 内部创建一个新的空对象

那么当函数内部有this时,结果会是怎样的呢?

使用new关键字后,在函数内部如果出现了this,则自动将this指向内部新建的对象上。最后返回时,因为this的缘故,对象上新建了a属性,并且赋值返回。

修正定义的对象Object的[[prototype]]

虽然实例上的[[prototype]]属性__proto__是ES6才作为规范出版的。但是在这之前chrome已经支持__proto__属性,他指向对象的原型。

原型的问题相当复杂,单独拿出来也可以当好几篇文章的量来讲。但是这并不是本文的重点。但是每一个对象从根部来说,继承自Object。而Object.prototype上面定义了一些方法,有类似toString,valueOf等等等方法。对于对象来说,支持通过属性链和方法链向上查询。所以在一个对象实例中,如果没有定义toString方法,但它还可以向上查询,找到原型中的toString方法,进行调用。

同时的,有很多元素通过Object实现继承。比如Function, Array, RegExp等等对象,它们也是对象,但是却是继承来自Object。

在这里,内部定义的对象,让他继承来自构造函数。

最后一步,也是最容易被忽略的一步,那就是当构造函数存在返回值时,并且返回值为对象时,返回对象而不返回之前定义的对象。

当然,上面说的Function,Array,RegExp也算Object的一种,如果返回他们同样也会阻止默认的对象返回。