簡體   English   中英

javascript原型如何創建對象

[英]javascript prototype how to create object

我目前正在使用javascript學習原型,我寫了以下內容,當我使用它時似乎工作正常。 我的問題是,為什么我需要在原型聲明的末尾加上(),否則如果我嘗試創建該對象的實例,則會收到錯誤消息。

var MyTest = function (agencyId, dataId) {
this.agencyId= agencyId;
this.dataId= dataId;
};

MyTest.prototype = function () {
    var setObservables = function () {
        ...
    },
    init = function (url) {
        ...
    };

    // public members
    return {
        init: init
    };  
}();

使用它,我稱它為

            var obj = new DetailsDivisionKO(1, 2);
        obj.init(actionUrl);

這個工作正常,但我對}()感到困惑; 在公共成員部分的末尾,為什么需要這樣做,而我卻無法使用它,而仍然使用上面的代碼來調用它? 否則,如果我嘗試調用上述代碼,則會收到錯誤消息:

Uncaught TypeError: Object [object Object] has no method 'init' 

您擁有的是IIFE 它是一個被直接調用的函數。 您基本上是在創建一個閉包 您要在將初始函數公開的同時將真正的私有范圍保留給setObservables函數。 因此,每次創建構造函數的新實例時,您的init函數將始終位於原型中。 但是setObservables不會。 在您的示例中,您只能在內部訪問setObservables函數(因此為私有作用域)。 通常,如果只希望init函數調用您的私有函數(在您的情況下為setObservables),則可以這樣做。 但是,如果這不是您想要的,則只需執行以下操作:

  var MyTest = function (agencyId, dataId) {
   this.agencyId= agencyId;
   this.dataId= dataId;
  };

  MyTest.prototype = {
     setObservables: function () {
         ...
     },
     init: function (url) {
         ...
     }
  }

現在,每次創建MyTest的新實例時,兩個函數都將在其原型中。

var test = new MyTest(1, 2);
test.init();
test.setObservables();

暫無
暫無

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

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