2016-04-10 4 views
0

ребята, я знаю, что это фиктивный вопрос, но я пробовал много и никогда не достиг. Я хочу определить переменные Javascript-файла внутри области действия класса, которые не будут переопределены никакими внешними источник .. вот мой код, определяющий переменные javascript внутри области видимости класса

var pageSize = 5; 
 
\t var startIndex = 0; 
 
\t var endIndex = startIndex + pageSize; 
 
\t var page = 1; 
 
\t var textField; 
 
\t var check = 0; 
 
// i want all of the above variables to be defined inside the scope of the class not outside 
 

 
function bindContext(fn, context) { 
 
\t return function() { 
 
\t \t fn.apply(context, arguments); 
 
\t } 
 
} 
 

 
function GridLibraryDep(data) { 
 
\t this.data = data; 
 
\t this.columns = $.map(this.data[0], function(item, key) { 
 
\t \t return key; 
 
\t }); 
 
\t document.getElementById("from").innerHTML = 1; 
 
\t document.getElementById("to").innerHTML = pageSize; 
 
\t document.getElementById("total").innerHTML = data.length; 
 
\t $("#first").click(bindContext(this.first, this)); 
 
\t $("#last").click(bindContext(this.last, this)); 
 

 
} 
 

 

 
GridLibraryDep.prototype = { 
 
\t \t 
 
\t first : function() { 
 
\t \t var size = this.data.length; 
 
\t \t page = 1; 
 
\t \t // document.getElementById("lbl").innerHTML = page; 
 
\t \t endIndex = page * pageSize; 
 
\t \t startIndex = endIndex - pageSize; 
 
\t \t this.deleteTable(); 
 
\t \t document.getElementById("from").innerHTML = 1; 
 
\t \t document.getElementById("to").innerHTML = endIndex; 
 
\t \t document.getElementById("total").innerHTML = size; 
 
\t \t this.display(); 
 
\t }, 
 

 
\t last : function() { 
 
\t \t var size = this.data.length; 
 
\t \t endIndex = size; 
 
\t \t startIndex = Math.floor(size/pageSize) * pageSize; 
 
\t \t page = Math.ceil(size/pageSize); 
 
\t \t this.deleteTable(); 
 
\t \t // document.getElementById("lbl").innerHTML = page; 
 
\t \t document.getElementById("from").innerHTML = startIndex + 1; 
 
\t \t document.getElementById("to").innerHTML = endIndex; 
 
\t \t document.getElementById("total").innerHTML = size; 
 
\t \t this.display(); 
 
\t }};

+0

Если эти переменные будут отличаться/независимо для каждого экземпляра 'GridLibraryDep' или вы хотите, чтобы каждый экземпляр разделяют эти переменные? –

+0

Я хочу, чтобы каждый экземпляр делил эти переменные –

+0

В чем именно ваш вопрос? Как сделать «частные» переменные в 'GridLibraryDep'? –

ответ

-1

Это обычный способ создать прототип класса - https://jsfiddle.net/aaronfranco/fysbbdp7/10/

var MyClass = MyClass || {}; 

(function() { 
    "use strict"; 

    //============================================================ 
    // Constructor - MUST BE AT TOP OF FILE 
    //------------------------------------------------------------ 
    MyClass = function() { 
     this.created = true; 
    }; 

    //============================================================ 
    // Member Functions & Variables 
    //------------------------------------------------------------ 
    MyClass.prototype = { 
     pageSize:5, 
     startIndex:0, 
     endIndex:0, 
     page:1, 
     textField:null, 
     check:0, 
     init: function(){ 
      this.endIndex = this.startIndex + this.pageSize; 
     }, 
     first : function() { 
      // function here 
      console.log(this.endIndex); 
     }, 

     last : function() { 
      // function here 
      //alert(this.pageIndex); 
      console.log(this.pageSize) 
     }, 
     iterater: function(int) { 
      console.log(this.pageSize); 
      this.pageSize += int; 
     } 
    } 
})(); 

Вот пример использования имеющихся в ссылке JSFiddle выше:

var newClass = new MyClass(); 
newClass.init(); 
newClass.first(); 

for(var i=0; i<10; i++){ 
    newClass.iterater(i); 
    newClass.last(); 
} 

Использование этого «пространства имён» технику, вы можете создать экземпляр этого класса с помощью

var newClass = new MyClass(); 
newClass.init(); 

Затем можно создать защищенные переменные в классе делая их частными. Существует хорошая статья о некоторых возможных способах создания защищенных переменных здесь.

http://philipwalton.com/articles/implementing-private-and-protected-members-in-javascript/

+0

он дает мне pageSize не определен –

+0

«var MyClass = MyClass || {}; 'не имеет большого смысла, потому что он равен' var MyClass = {}; '. Ваш '(function() {...})' не вызывается, потому что вы пропускаете '()', который вызывает эту функцию. Если вы добавите '()' для вызова функции, то 'var MyClass = {};' не имеет смысла, потому что вы сразу же перезаписываете 'MyClass'. Кроме того, 'endIndex: this.startIndex + this.pageSize,' не имеет смысла, потому что 'this' является' window' в данном примере. –

+0

Yup, извините, обновил мой ответ. –

Смежные вопросы