2015-08-10 5 views
0

Предположим, я сделать пользовательский объект:Как определить и вызвать частный метод в прототипе в JavaScript?

function MyObject() { 
    // define some properties 
} 

Теперь я хочу определить частный метод в прототипе:

MyObject.prototype = { 
    // by doing this I defined a public method, how can I define a private method? 
    myMethod: function() { 
    //some code 
    } 
} 

Тогда я хочу, чтобы вызвать функцию в конструкторе вроде этого:

function MyObject() { 
    // define some properties 
    call myMethod() 
} 

Как я могу это сделать?

+1

В js нет частных методов. Зачем вам это делать? – Bergi

+0

@Bergi, потому что я не хочу, чтобы кто-либо вызывал метод за пределами –

+0

Попробуйте 'this.myMethod()'. При создании класса и экземпляра этого класса с ключевым словом 'new' объект получает прототип связан. 'this' будет ссылаться на текущий экземпляр этого класса. Удивительная серия книг идет довольно подробно и БЕСПЛАТНО: https://github.com/getify/You-Dont-Know-JS Вы можете прочитать все об этом! – JensDebergh

ответ

2

Если вы хотите использовать частный метод, не используйте прототип. Вместо этого используйте область действия:

function MyObject() { 

    var privateFunction = function() { 
     // only code within this constructor function can call this 
    }; 

    privateFunction(); 
} 
+0

Это почти единственный способ сделать частные функции в js. Стоит отметить, что другие функции прототипа объекта также не могут вызывать функцию, и вы получите копию функции в памяти на один экземпляр, а не одну функцию, разделяемую во всех экземплярах, как и с функциями, определенными на прототипе. –

+0

Наклонение этого ответа, поскольку это показывает простой, но чистый пример закрытия в javascript. – JensDebergh

+0

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

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