JS函数难点理解

什么是函数?


函数是一种定义一次,即可多次调用的方法。如果函数挂载在一个对象上,如果通过这个对象来调用这个函数时,该对象就是此次调用的上下文(this的值)。函数可以在函数中定义,就会形成闭包。

 

    /**
     * 闭包实例
     * todo 用一个例子展现闭包的基本作用。
     */

    /*计数
     doctest:
     count(1);
     >>1
     count(1);
     >>2
     count(2);
     >>3
     count(5);
     >>8
     */
    var count = (function () {
        var i = 0
        var func = function (x) {
            if (arguments[0] != null) {
                i += x;
            } else {
                i++
            }
            return i;
        }
        return func
    })();  //加这个可以直接实例化。

    /**
     * 实例化两个对象。每个对象有变量i,且不共享.私有变量
     */

    var addPrivateValue = function (o, name) {
        var value = 1;
        o[‘get‘ + name] = function () {
            return value;
        }
        o[‘set‘ + name] = function (v) {
            value = v
        }
    }

    o = Object();
    addPrivateValue(o, "s");
    o.sets("asdf");
    o.gets();

    /**
     * 避免变量污染
     *
     * 应用场景
     * 如果一个页面,有一个按钮点击切换div的显示或者隐藏. (这个div的内容也在这个方法内定义。)
     *
     */

    var main_message = (function () {
        var message = "<div>" + " 测试!这是一个警告"
        "</div>";
        var box = document.createElement("div")
        document.body.appendChild(box)
        var show = function () {
            box.style.display = ‘‘;
            console.log("hha")
        }
        var hide = function () {
            box.style.display = "None";
        }
        var obj = {}
        obj.show = show;
        obj.hide =hide;
        return obj
    })();

 

 

什么是原型对象?

var Credit = function(){
        var name;
    }
    //prototype 返回对对象的原型引用。  原型函数会先调用原来的那个方法 与继承还是有区别的。
    Credit.prototype.getName = function(){
        console.log("Credit");
        return this.name
    }
    Credit.prototype.setName = function(name){
        console.log("Credit");
        this.name = name;
    }

    var NewCredit = function(){
    }
    NewCredit.prototype.getName = function(){
        console.log("NewCredit");
        return this.name
    }
    NewCredit.prototype.setName = function(name){
        console.log("NewCredit");
        this.name = name;
    }


    NewCredit.prototype = new Credit();

    var c = new NewCredit();
    c.setName("adf");//这个会输出Credit
    c.getName();

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。