【发布时间】: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