调用某个js方法里的方法

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

我大概看了一下上面的解决方法,有函数返回值,构造对象,也有用闭包挂载到全局的。

经验分享 程序员 微信小程序 职场和发展