0

我曾经使用 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 语句来改变执行 对不起,如果它太简单了。

4

2 回答 2

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>

参考:如何在 JavaScript 中找出调用者函数?

传递身份证:

由于问题实际上是如何根据调用者的身份执行不同的操作,因此您需要一个 if 语句来检查应该执行的操作。

function doSomething(actionNumber)
{

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

//etc...
}

function2()
{
doSomething(1);
}
于 2013-06-21T16:57:27.997 回答
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'Reilly 的 JavaScript 模式

于 2013-06-21T17:09:28.910 回答