怪异的js类的写法,大家看看解释一下

fxs_2008 2010-11-23 03:55:22
大体上如下:


大体上如下:
var editor = function(){
var ajaxRequestUrl = "";

function Fields(id, title) {
this.fields = [];
}

Fields.prototype = {
save : function() { },
redirect : function(result) {},
}
return {
init : function() { this.allowFields = new allowEditFields();}
}
}();

//调用

$(document).ready(function(){
editor.init();
});



两个问题:红色部分怎么理解?
...全文
243 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingyuexiaozi 2010-11-25
  • 打赏
  • 举报
回复
什么是自执行function()
fxs_2008 2010-11-25
  • 打赏
  • 举报
回复
谢谢各位了。

js只看过一本书,手里的书上没介绍自执行函数的。
as123456789d 2010-11-23
  • 打赏
  • 举报
回复
自执行函数
(function(){
alert("dd")
})();

void function(){
alert("dd")
}();

~function(){
alert("dd")
}();

!function(){
alert("dd")
}();

第二个例子也是一样的
也是一个自执行函数 。只不过带了一个参数
自执行函数后的()的里面与函数的参数一致!!
代码: (function(b){
var c=b;
})(b) //这个b不能少,,少了的话,,就不会被传进去!!!

$与jquery是一个意思 它们指向的都 是同一个对象
jquery=window.jquery=window.$=function(){
.....
} //jquery里面的
hch126163 2010-11-23
  • 打赏
  • 举报
回复
editor.init();允许的

但如果在其他地方:editor.Fields();允不允许?
这个是不允许的!
Fields 是 editor 的私有局部变量,只能在 editor 内部使用

function a()
{
var aa=1; // 私有变量
this.bb =2; // 公共变量,外面可以通过a 的实例来访问
}
Mr-Jee 2010-11-23
  • 打赏
  • 举报
回复
var g = function(){
function Test() {
this.age = 24;
}
return {
init:function(){
this.name = "jeechang";
},
test:Test
};
}();
g.init();
alert(g.name);//jeechang
g.test();
alert(g.age);//24
alert(g.Test());//error
希望你能明白~
fxs_2008 2010-11-23
  • 打赏
  • 举报
回复
比如:第一例中

editor.init();允许的
但如果在其他地方:editor.Fields();允不允许?


Mr-Jee 2010-11-23
  • 打赏
  • 举报
回复
但有一问题:如果外部调用,是否是return里的方法和return外的方法都能调用。

var editor ={
init : function() { this.allowFields = new allowEditFields();} //但是这个allowFields就存在了
}
还有一个问题:匿名函数里的方法能否被其他全局对象调用(不是editor),想了解一下方法的作用域。
不能~~这个方法只能供你的editor来使用了,隐藏变量就是这个目的~
fxs_2008 2010-11-23
  • 打赏
  • 举报
回复
再看调用:

$(document).ready(function(){
editor.init();
});

他调用了匿名函数的return里的方法。有点理解了,匿名函数返回一个对象,它实质调用返回对象里的方法。

但有一问题:如果外部调用,是否是return里的方法和return外的方法都能调用。

还有一个问题:匿名函数里的方法能否被其他全局对象调用(不是editor),想了解一下方法的作用域。
fxs_2008 2010-11-23
  • 打赏
  • 举报
回复
没见过多少世面,让各位见笑了。

[Quote=引用 3 楼 cj205 的回复:]

哥 这真是你的ID吗?

自执行函数
(function(){})()
就是定义一个自执行的匿名函数。
[/Quote]


jquery的例子可按你说的理解为自执行函数。


var editor = function(){ }();这个怎么理解?
var editor = function(){ }定义匿名函数不行吗?为什么还要多加个括号。

猿敲月下码 2010-11-23
  • 打赏
  • 举报
回复
匿名函数
也就是先声明这个函数,完了之后马上运行一把.

类似于:
var ff = function(){..}
ff();
Crazywa 2010-11-23
  • 打赏
  • 举报
回复

可能是专职php程序员,不会javascript。。
Mr-Jee 2010-11-23
  • 打赏
  • 举报
回复
这样的话就形成了一个闭包了。隐藏了些变量。
Mr-Jee 2010-11-23
  • 打赏
  • 举报
回复
哥 这真是你的ID吗?

自执行函数
(function(){})()
就是定义一个自执行的匿名函数。
米か臹 2010-11-23
  • 打赏
  • 举报
回复
看不到红色的哦
fxs_2008 2010-11-23
  • 打赏
  • 举报
回复
第二个例子:

///////////////////////////////////
//指定 jquery.ui.dialog打开时的位置
///////////////////////////////////
(function($) {
var originOpen = $.ui.dialog.prototype.open
$.ui.dialog.prototype.open = function() {
//var event= window.event || arguments.callee.caller.arguments[0];
//var event = event || window.event;
var event = getEvent();
//alert(event) // ie 和 ff下,都显示 "[object]"
var PosX = 0;
var PosY = 0;
if (event.pageX || event.pageY) {
PosX = event.pageX;
PosY = event.pageY;
}
else {
PosX = event.clientX + document.body.scrollLeft - document.body.clientLeft;
PosY = event.clientY + document.body.scrollTop - document.body.clientTop;
};
this.options.position = [PosX, PosY];
//alert(this.options.position);
originOpen.apply(this, arguments);
};

function getEvent() { //同时兼容ie和ff的写法
if (document.all) return window.event;
func = getEvent.caller;
while (func != null) {
var arg0 = func.arguments[0];
if (arg0) {
if ((arg0.constructor == Event || arg0.constructor == MouseEvent)
|| (typeof (arg0) == "object" && arg0.preventDefault && arg0.stopPropagation)) {
return arg0;
}
}
func = func.caller;
}
return null;
}
})(jQuery);




主要问题是类的声明问题:这种声明如何理解?

87,919

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧