在这种情况下,不使用javascript对象就可以解决问题

时间:2013-06-21 16:48:04

标签: javascript

我习惯使用python进行编程,但我现在正在使用javascript进行某些项目。在python中,OOP概念比我正在阅读的javascript简单易行。话虽这么说,我现在不太习惯使用javascript对象和原型。同时,我可以在不使用对象的情况下实现以下目的吗?我不是一个纯粹的程序员(总是把它当成业余爱好)所以请耐心等待我:

function func1(arg1){

does item..1..for eg...var result=arg1*2;
does item..2..for eg...var resultSq=arg*arg;
......
}

我想要其他函数,比如调用func1时的func2; funct1仅通过执行item ... 1并返回结果来响应。

换句话说,我想检测谁调用了函数并使用if语句来改变执行 对不起,如果太简单了。

2 个答案:

答案 0 :(得分:1)

确定来电者是谁:

<script>

function func1()
{
    if(arguments.callee.caller.toString().indexOf(" test()") != -1) 
    //May be optimizable with a name property
    {
        return "I was called from test()";
    }   

     if(arguments.callee.caller.toString().indexOf(" test2()") != -1)   
    //May be optimizable with a name property
    {
        return "I was called from test2()";
    }

}

function test()
{
    return func1();
}

function test2()
{
    return func1();
}

alert(test());
</script>

参考:How do you find out the caller function in JavaScript?

传递ID:

因为问题实际上是如何根据调用者是谁来执行不同的操作,所以需要使用if语句来检查应该执行的操作。

function doSomething(actionNumber)
{

if(actionNumber == 1)
{
return 1;
}
else if(actionNumber == 2)
{
return 1;
}

//etc...
}

function2()
{
doSomething(1);
}

答案 1 :(得分:1)

有许多模式可以创建和处理对象,这里有一个我经常使用的模式。

JavaScript原型OOP

var ConstructFoo = function () { //capitalise constructor names
    var x = "my private variable";//remember, JS has FUNCTIONAL scope
    this.y = 10; //we can read and write to this outside of this function
}
ConstructFoo.prototype.barMethod = function () {
    return this.y * 10;
}
var bash = new ConstructFoo();//new keyword is syntactic sugar for creating a new instance
alert(bash.y);//will alert 10
alert(bash.x);//ERROR, this is undefined
alert(bash.barMethod());//will alert 100
var baz = new ConstructFoo(); //new instance, lets prove it
alert(bash === baz); //will alert false
bash = "";
alert(bash.y);//ERROR, this is undefined
alert(baz.y);//alerts 10

不要与JavaScript对象混淆:

var foo = {
    funcA: function (params) {
       var bar = 2;
       //etc
       return bar;
    },
    funcB: function (param) {
        var bar = param * 2;
        //etc
        return bar;
    }
};

foo.funcA(7);//returns 2
foo.funcB(2); //returns 4

这是一个静态对象。您不会创建它的新实例。如果在其他地方更改foo.funcA,它将影响使用该函数的所有代码。

推荐阅读:O&#39; Reilly的JavaScript模式