【问题标题】:Make functions private inside another function Jquery在另一个函数 Jquery 中将函数设为私有
【发布时间】:2016-09-08 06:49:44
【问题描述】:

我正在使用 oo Javascript,我想知道如何在另一个函数中将一个函数设为私有......我的函数“render()”内部有很多函数,并且渲染函数在页面末尾加载......但是我该怎么写呢?我有我的例子,到目前为止我做了什么......有人可以帮助我理解它吗?

这些是我的功能:

 (function($) {
    'use strict';
    session.page.pending = true; 
    var Product = finance.entre.Model.extend({ 
            type: 'Product',
            render: function() {
              
 //here should all this functions inside render: function() (like  addEventHandlers: and populatepage:) become private
              
    addEventHandlers: function(){     
       $(document).on('change',':input[name=PR_Type]', function(event) {
                    var $target = $(event.target);
                    product.updateObjectTypes($target.val());
                    product.updateHideWhen();
                });
                $(document).on('focus', ':input[name=DocUNID]', function(){
                    this.select();
                });
            },
            populatePage: function() {
                console.log('populatePage');
               if (session.user.type == 'Internal') {
                    $('.external').remove();
                   dbService.dbLookup('main', 'vwInsurances', 2, null).done(function(data){
                        console.log('lookup done');
                        $('select[name=PR_Insurance]').setOptions(data, true);
                    });
                }
    });
              
              
    $.when(session, $.ready).then(function(){
            var product = new Product(undefined, {id: session.page.id});
            product.fetch().always(function() {
            product.render();
            session.page.render.resolve();
        });
    });

所以我尝试了这样的事情:

(function($) {
    'use strict';
    session.page.pending = true; // delay translation until page rendered
    var Product = finance.entre.Model.extend({ // override passed options with below
            type: 'Product',
            render: function() {
                
                $(document).on('change',':input[name=PR_Type]', function(event) {
                    var $target = $(event.target);
                    product.updateObjectTypes($target.val());
                    product.updateHideWhen();
                });
                $(document).on('focus', ':input[name=DocUNID]', function(){
                    this.select();
                });
              
                ...

我刚刚删除了“render()”中函数的名称声明,对吗?或者我应该声明类似 -i dont know- var instance = this;在一些特别的地方叫“这个”?

非常感谢大家抽空检查代码可以稍微解释一下:)!!

【问题讨论】:

  • 将它们设为私有是什么意思?在函数中定义的函数仅在该函数中可见,除非您通过使用全局变量或其他方法专门使该函数可见......所以,实际上,如果它们不是私有的,那是因为您已经做了一些事情使它们公开 -简单的回答,不要做那种事
  • 这和oop无关...
  • 谢谢你的解释,我现在开始明白了!

标签: javascript jquery oop javascript-objects


【解决方案1】:

像这样:

var Product = finance.entre.Model.extend((function (){

    function private1() {}
    function private2() {}

    return {
         type: 'Product',
         render: function() {
                private1();
                private2();
         }
    };
}()));

【讨论】:

  • 谢谢@cske!我现在就这样做了,似乎效果更好
猜你喜欢
  • 1970-01-01
  • 2015-07-04
  • 2013-12-17
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多