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下的所有方法了。

    注: 参考

  • 相关阅读:
    多项式牛顿迭代
    小明A+B
    分拆素数和
    选课时间
    今年暑假不AC
    Lowest Common Multiple Plus
    大小写转换问题(java程序)
    VS 中输入带空格的两个字符串
    整除的尾数
    不要62
  • 原文地址:https://www.cnblogs.com/cyclone77/p/5755893.html
Copyright © 2011-2022 走看看