zoukankan      html  css  js  c++  java
  • JavaScript函数的调用模式

    我们说一个函数的调用模式是作为一个函数来调用,是要与其它三种调用模式做区分
    函数其他的三种调用: 方法调用模式,构造器调用模式,apply/call调用模式。

    方法的调用模式:

    var obj={
        fun1: function(){
            //方法内容
            this; //指的是window
        }
    }
    
    obj.fun1() //方法的调用

    构造器的调用:

    function Person(name, age, job){
        this.name = name;
        this.age = age;
        this.job = job;
        this.sayName = function(){
            alert(this.name);
        };
    }
    var person1 = new Person("Nicholas", 29, "Software Engineer");
    var person2 = new Person("Greg", 27, "Doctor");

    apply/call调用模式:

    function cat(){}
    cat.prototype = {
        food: "fish",
        say: function(){
            alert("I love " + this.food);
        }
    };
    
    var blackCat = new cat; 
    blackCat.say();
    这里如果没有显性的return语句,这个新的对象则会被隐式的return,并成为这个构造器的值。 也就是说这里可以等价于: var blackCat = new cat();

    但是如果我们有一个对象

    var whiteDog = {
        food: "bone"
    };

    我们不想对它重新定义say方法,那么我们可以通过call或apply用blackCat的say方法:

    blackCat.say.call(whiteDog);

    所以,可以看出call和apply是为了动态改变this而出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作。

    用的比较多的,通过document.getElementsByTagName选择的dom 节点是一种类似array的array(arguments等等)。它不能应用Array下的push,pop等方法。我们可以通过:
    var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*")); 

    这样domNodes就可以应用Array下的所有方法了。

    注: 参考

  • 相关阅读:
    第七周java学习总结
    第六周java学习总结
    20175206迭代与JDB测试
    第五周java学习总结
    实验一 Java开发环境的熟悉(Linux + Eclipse)
    第四周java学习总结
    第三周java学习总结
    es6零基础学习之项目目录创建(一)
    软键盘影响页面布局之定位
    当input的框全部不为空时,提交按钮变色
  • 原文地址:https://www.cnblogs.com/cyclone77/p/5755893.html
Copyright © 2011-2022 走看看