如何从另一个内部函数调用一个方法

时间:2014-01-24 20:11:12

标签: javascript

我试图创建像

这样的javascript对象
function Caller() {

this.init = function() {
    makeCall();
};
this.makeCall = function(){/*come code here*/}

}

var a = new Caller();
a.init();

我没有定义错误函数,当我尝试调用this.makeCall()时会发生同样的事情; 当我从makeCall定义中删除它时,它可以工作,但是当我从init中删除它时它不起作用。怎么解决这个问题?

6 个答案:

答案 0 :(得分:4)

使用this.makeCall()。另外在使用之前定义makeCall()

function Caller() {
    this.makeCall = function () { /*come code here*/ }
    this.init = function () {
        this.makeCall();
    };
}
var a = new Caller();
a.init();

DEMO

答案 1 :(得分:2)

使用this.makeCall()这是一种方法,您可以使用它。

答案 2 :(得分:2)

试试这个this.makeCall()功能在这里成功执行。

<html>
<head>
</head>

<body>
 <script>
    function Caller() {

        this.init = function() {
            this.makeCall();
        };
        this.makeCall = function(){
            alert('hello');
        }

    }

    var a = new Caller();
    a.init();
 </script>
</body>
</html>

答案 3 :(得分:1)

您需要使用this

正确调用此功能
makeCall(); => this.makeCall();

答案 4 :(得分:1)

您可以使用IIFE声明Caller

var Caller=(function () {
    function constructor() {
    }

    function makeCall() {
        /*come code here*/
    }

    constructor.prototype.init=function () {
        makeCall.apply(this, arguments);
    };

    return constructor;
})();

var a=new Caller();
a.init();

并确保Caller在调用之前已加载。

答案 5 :(得分:0)

要回答您的问题并增强您的代码,您应该看一下:

function Caller(){};

这是你的构造函数 然后,您可以像这样向构造函数添加方法:

Caller.prototype.init = function () {
    // do something
}

创建“类”Caller

的实例时
var a = new Caller();

每个实例都将具有您在Caller.prototype对象中描述的方法。

并解决您的问题:
如果一个原型方法想要调用另一个原型方法,则需要执行此操作:

// do some setup in your constructor
function Caller(phoneNumber) {
    this.phoneNumber = phoneNumber;
};

Caller.prototype.init = function () {
    // the code word "this" will be the instance itself
    this.makeCall();
};

Caller.prototype.makeCall = function () {
    // do whatever this method needs to do
    alert('calling ' + this.phoneNumber);
};

var a = new Caller(0123456789);
a.init();

要理解的主要是,在每个原型方法中,关键字this引用构造函数的当前实例(在本例中为Caller)。