• 理解JavaScript的function


    JavaScript中最有特色而又让你困惑的function算一个了,下面看一下常用操作:

    function doit(){
    	.....
    }
    doit();
    

    JavaScript中的函数我们可以把它当作方法使用

    var obj=new Object();
    obj.say=function(){
    	.....
    }
    obj.say();
    

    而function实际上就是对象(即Function类型的实例)

    function result(num1, num2) {           
    	return num1 + num2; 
    }
    var result = new Function("num1", "num2", "return num1+num2");
    

    以上执行效果是一样的,同时function result还可以这样写(即函数表达式)

    var result=function(num1,num2){
    	return num1+num2;
    }
    

    这俩种写法的唯一区别是function是优先执行,而函数表达式是代码执行到才执行,另外每个函数内部都有一个类似数组的arguments对象,函数执行动态参数,即:

    function result(){
    	return arguments[0]+arguments[1];
    }
    result(1,2);
    

    arguments在动态传递参数方面经常使用。

    既然说function是对象,那么它应该也具体属性。

    function person(){
    	....
    }
    person.name="xxxx";
    person.say=function(){
    	alert(this.name);
    }
    person.say();   //alert("xxxx")
    

    我们还可以把它当成类,而函数体相当于构造函数

    function Person(nm){
    	this.name=nm;
    	this.say=function(){
    		alert(nm);
    		alert(this.name);
    	}
    }
    var p1=new Person("ygm1");
    p1.say(); //alert ygm1 ygm1
    var p2=new Person("ygm2");
    p2.say(); //alert ygm2 ygm2
    

    注意这里要用this.name 因为this代表的是当前对象,如果直接alert(name) 求的是window对象的属性,同时传进来的参数nm在方法say中可以直接用,其实这涉及到作用域链,每个function体就是一个作用域,子域可以访问到父域的属性,而反过来却不行(其实也是可以取到的,设计到闭包一些知识,这里不做详解..)

    与其他一些OO语言相比,每个类都可以有一些静态属性或方法,而javascript通过原型来模拟以达到每个对象共享其属性。

    function Person(num) {
    	.....
    }
    Person.prototype.name = "ygm";
    alert(new Person().name);
    

    但OO语言的静态方法都是由类去调用,不能实例化本身的,javascript中由于其特殊性恰好相反。

    注意这里alertPerson的name属性,如果函数体内没有查找到name则会到原型中去找,如果查找到则会屏蔽原型中的name直接返回其值。

    其实每创建一个function的同时也创建了一个原型对象,而原型对象引用自object,所以object是所有对象的基类。

    我们可以重写原型对象 Person.prototype=new ParentPerson();

    Person的原型对象指向ParentPerson对象,而ParentPerson对象又指向自己的原型对象...,也就形成了原型链...

  • 相关阅读:
    [BZOJ2324][ZJOI2011]营救皮卡丘
    P4324 [JSOI2016]扭动的回文串
    P5068 [Ynoi2015]我回来了
    P4412 [SHOI2004]最小生成树
    bzoj3118: Orz the MST(线性规划+单纯形法)
    bzoj3265: 志愿者招募加强版(线性规划+单纯形法)
    bzoj3550: [ONTAK2010]Vacation(单纯形法+线性规划)
    uoj#179. 线性规划
    P2093 [国家集训队]JZPFAR(KDTree)
    P3538 [POI2012]OKR-A Horrible Poem
  • 原文地址:https://www.cnblogs.com/xiaoyang002/p/4044910.html
Copyright © 2020-2023  润新知