var a = function(){
function b(){...}
function c(){...}
}
如何调用了a方法里的c方法,而不会调用到b方法,如果实例化a方法的话,b方法是会被执行的。
解决方案:
1
var a = function() {
function b() {...}
function c() {...}
return {
b: b,
c: c
}
}
var obj = a();
obj.c();
2
var a = (function(){
var a = {
b:function(){
console.log('b');
},
c:function(){
console.log('c');
}
}
return a;
})();
a.c();//
3 用闭包挂载到全局?
(function(window){
var a = window.a = {};
a.b = function(){...}
a.c = function(){...}
})(window);
调用的话,直接a.b() 即可。
4 这样写感觉有点坑, 写的js最好用对象的方法.
// 构造对象a a有方法b和c
var a = {
b: function() {document.write('b')},
c: function() {document.write('c')}
}
// 调用函数
a.b();
a.c();
有些概念对我是模棱两可的,我觉得楼主提了个好问题,帮我重新疏理了一下盲点。
先说我的解决方法:
var temp=function a(){
this.b=function b(){
console.log('b');
}
this.b=function c(){
console.log('c');
}
}
var t=new temp();
t.b();
知识点疏理,
1.函数内部的变量又称私有变量或私有函数,是在外部访问不到的
function Test(){
var color = "blue";//私有变量
var fn = function(){} //私有函数
}
2.函数的属性称为静态变量,函数实例化的对象(var f=new fn();)无法访问原型的静态变量
function Obj(){}
Obj.num = 72;//静态变量
Obj.fn = function(){} //静态函数
alert(Obj.num);//72
alert(typeof Obj.fn)//function
var t = new Obj();
alert(t.name);//undefined
alert(typeof t.fn);//undefined
3.构造函数本身是无法访问其自身的值,实例化对象可以,
function Obj(){
this.a=[]; //实例变量
this.fn=function(){ //实例方法
}
}
console.log(typeof Obj.a); //undefined
console.log(typeof Obj.fn); //undefined
var o=new Obj();
console.log(typeof o.a); //object
console.log(typeof o.fn); //function
我大概看了一下上面的解决方法,有函数返回值,构造对象,也有用闭包挂载到全局的。