/*********************第一个例子******************/
function test(){
function b(){
this.c();
}
b.prototype.c=function(){
alert('worked!');
}
return b();
}
var c=function(){
b=arguments.callee.caller;//在全局重新定义c防止test执行出错,然后保存b的引用
}
test();
new b();
/*********************第二个例子******************/
var a = function(){
function b(){this.c()}
b.prototype.c = function(){alert('worked!')}
return {b:b};
}();
/**********错误的做法*************/
a.b();//这里会报错提示c不是一个方法,因为prototype是需要在一个函数对象创建的时候才会生成,
//外层匿名函数执行了,但是b()却是没有实例化的,prototype对像都没有生成,当然c没有定义也不可能执行的。
/**********正确的做法*************/
new a.b(); //必须通过new关键字实例化,否则取不到c()的实例,因为c是通过prototype内建的
/*********************第三个例子******************/
var a2 = function(){
return{
b2:function(){
this.c2();
},
c2:function(){
alert('worked!');
}
}
}();
a2.b2();//因为这里的c2不是通过prototype内建的,于是,a2对象里的b2函数是可以直接调用的。