簡體   English   中英

從javascript中的對象調用函數

[英]calling a function from an object in javascript

我需要對此問題進行更多的澄清。我有一個對象,它有兩個這樣的功能。

<script type="text/javascript">
obj =
{
  f1 : function () 
  {
       var k = this. f2(param1 , param2 , param3);// I don't know whether it is correct
  },
  f2 : function (par1 , par2 , par3)
  {
      return param1 + param2 + param3;
  }
}
</script>

如何從f1調用函數f2? 我可以在f2中聲明f1嗎? 如果是,怎么回事? 哪種方法最好?

不是替換上面的答案,而是提供一種選擇:當我編寫具有方法的對象的定義時,我更喜歡使用函數構造函數,以便隱藏“私有”閉包變量並與OOP相似。

var myClass = function() {

    /******** PRIVATE **********/

    var _s = "foo";          // Private member
    var _f = function() {};  // Private method

    /******** PUBLIC **********/

    this.s  = "bar";          // Public member
    this.f1 = function() {    // Public method
        console.log(_s + " " + this.s);  // Concat private and public
    }
    this.f2 = function() {
        this.f1();
    }
}

var myObject = new myClass();
myObject.f2(); // prints "foo bar"

要共享this ,最好將函數添加到obj.prototype中。

obj = {};
obj.prototype = {
    f1: function(){
    },
    f2: function(params){
    }
};

這樣的事情可能會給你一個更好的主意。 我已經對其進行了測試。

obj =
{
  f1 : function () 
  {
  console.log("in F1");
  obj.f2();
       },
  f2 : function ()
  {
      console.log("in F2");
  }
};

console.log(obj.f1());

這是它的小提琴=> http://jsfiddle.net/CJ7Uz/

脫離Barmar的建議,代碼如下所示:

<script type="text/javascript">
var obj = {
  f1: function ()  {
   var k = this.f2(param1 , param2 , param3);
  },
  f2: function (par1 , par2 , par3) {
    return par1 + par2 + par3;
  }
};
</script>

同樣,在this.之后要留一個空格的壞主意this. 在您的代碼中。 :)

像這樣調用f2:

<pre>
<script type="text/javascript">
obj =
{
  f1 : function ()
  {
       var k = this.f2(1 , 2 , 3);// it is correct :)
       alert(k);
  },
  f2 : function (par1 , par2 , par3)
  {
      return par1 + par2 + par3;
  }
}

obj.f1();
</script>
</pre>

並查看下面的鏈接以找到第二個問題的答案
http://www.phpied.com/3-ways-to-define-a-javascript-class/

您可以通過給定的代碼使用它,但要注意范圍 請考慮以下兩部分代碼的輸出。

obj =
{
  f1 : function () {
       var k = this. f2(1 , 2 , 3);
  },
  f2 : function (par1 , par2 , par3){
      console.log(this);
      return par1 + par2 + par3;
  }
}
obj.f1();

obj =
{
  f1 : function () {
       var k = this. f2(1 , 2 , 3);
  },
  f2 : function (par1 , par2 , par3){
      console.log(this);
      return par1 + par2 + par3;
  }
}
function MyClass () {
    return this;
}
MyClass.prototype = obj;
var tmp = new MyClass();
tmp.f1();

您也可以在f2中聲明f1,但是如果要在其他地方使用f1,則必須編寫f1 agian。

您的問題已解決:

      <a href="#" onclick="obj.f1()">Click</a>

       obj =
      {
        f1 : function () 
        {
            alert('f1');
            var param1=param2=param3=0;
             var k = this.f2(param1 , param2 , param3);

        },
        f2 : function (param1 , param2 , param3)
        {
            alert('f2')
            return param1 + param2 + param3;
        }
      }

有關演示,請訪問此鏈接DEMO

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM