• 一些零零碎碎的


    function($){}(document,window);

    (function($,window,document){})(jquery,window,document)
    即时函数,将jquery,window,document传入函数中去
    追问
    是什么情况会用到这个啊?把jquery,window,document传入函数中去然后可以干嘛?
    回答
    主要传递jquery对象进去。
    因为函数内部有作用域,所以把代码包在一个即时函数中,防止对全局作用域造成污染。

    1、js不支持函数(方法)的重载


    2、js中,一个方法是一个对象

    3、方法的定义内部机制是通过new Function实现的,一个方法就是Function类的一个实例对象
    因此方法的定义可以有一下两种模式:
    第一种:
    function add(number){
    alert(number);
    }
    第二种:
    var add = new Function("number","alert(number);");

    4、每个方法即对象都有内置的arguments对象和length属性
    arguments对象为数组类型,由调用方法时实际传递的参数组成,可以通过arguments.length来获得实际传递的参数的个数,也可以通过arguments[0]、arguments[1]等获得实际传递的各个参数的值
    length属性为方法所期望的参数的个数,即定义方法时所写的参数的个数
    示例:
    function add(number){
    alert("实际传递的参数个数为: " + arguments.length);
    }
    alert("方法add期望的参数个数为: " + add.length);//运行结果:“方法add期望的参数个数为: 1”
    add(1,2,3);//运行结果:“实际传递的参数个数为:3”

    5、js有5种数据类型(原数据):Undefined、Null、Boolean、Number、String
    Undefined数据类型的值只有1个:undefined
    Null数据类型的值只有1个:null
    Boolean数据类型的值只有2个:true、false
    Number的数据类型的值:所有的浮点数和整数
    String的数据类型的值:所有的字符串
    undefined是由null派生而来的

    6、应用typeof运算符的结果值有5种:undefined、boolean、number、string、object,前面4个是原始类型的值,最后1个是对象

    7、对于函数来说,如果其不返回值,那么其返回值就为undefined

    8、对于函数定义中的变量来说,加var表示局部变量,不加var表示全局变量

    9、强制类型转换有3种:Boolean(value),Number(value),String(value),返回值类型(即用typeof运算符)都是原始类型的值
    Boolean(value):只有value的值为null或0或""时,才为false,否则为true
    Number(value);value为非数字时,结果为NaN(意思为not a number)

    10、Boolean、Number、String也可以作为一个类,然后通过new的方式来进行实例化成对象,当然应用typeof后返回值是object
    new Boolean(value)
    new Number(value)
    new String(value)

    11、Object类是js中所有类(包括自定义类和内部类)都是继承自它
    假如obj是一个实例对象,那么,一般可以通过如下方式获得该对象所拥有的所有属性,而有些则不能
    for(var temp in obj){
    alert(temp);
    }

    不可以使用的情况有:obj为new Object()
    可以使用的内置对象比如:window
    for(var temp in window){
    alert(temp);
    }
    一般多数是用在自定义类中

    另外任何类通过obj.propertyIsEnumerable("prototype")可以判断实例对象是否有属性(obj是类的实例对象)

    12、js不同于java的另一种特点是:js在实例化对象后,可以对这个对象增加属性和属性值,并且还可以通过delete一元操作符来删除对象的属性。
    var o = new Object();
    o.name = "langsin";
    alert(o.name);
    delete o.name;
    alert(o.name);

    Douglas Crockford大师把this古怪的行为解释为和函数的调用模式有关。
    js中有四种调用模式---方法、函数、构造器以及apply调用模式,它们在初始化this时候是不一样的。


    1)方法模式:简单的说就是使用点表达式或是下标表达式来调用 这里定然是有对象的 这种情况下 this的绑定发生在调用的时候 绑的自然是调它的那个对象了。
    作为方法调用的函数有一个非常重要的属性:在方法体中,用来调用方法的对象成为关键字this的值。


    2)函数模式:这个就更简单了,函数名加调用运算符('()')。不过要小心,这个this绑的可是全局对象,不管你写哪了。(可以理解成  你不给我指明了   我就自己给它加个全局对象)
    当一个函数作为函数调用而不是方法调用时,这个this关键字引用全局对象。容易混淆的是,当一个嵌套的函数(作为函数)在一个包含的函数中调用,而这个包含的函数是作为方法调用的,这也是成立的:this关键字在包含的函数中有一个值,但是它却(不太直观地)引用嵌套的函数体的内部的全局对象。


    看个例子吧

    var a = 'global';
    var obj = {
        a : 'local',
        test : function(){
            function test1(){
                alert(this.a);//global
            }
            alert(this.a);//local
            test1();
        }
    };
    obj.test();


    /*****************************解决这个问题的方法*****************************/

    var a = 'global';
    var obj = {
        a : 'local',
        test : function(){
            var that = this;
            function test1(){
                alert(that.a);//local
            }
            alert(this.a);//local
            test1();
        }
    };
    obj.test();


     
    3)构造器调用模式  一句话就是用new来调用的  new的时候this就绑定到新对象上了  比较好理解
    (1)new运算符后面必须跟着一个函数调用。new创建了一个新的没有任何属性的对象,然后调用该构造函数,把新的对象作为this关键字的值传递。
    (2)构造函数通常没有返回值。它们初始化作为this的值来传递的对象,并且没有返回值。但一个构造是允许返回一个对象值,并且如果它这么做,返回的对象成为new表达式的值。在此情况下,作为this的值的对象会被抛弃。可参考jQuery构造函数。


    4)apply,call调用模式  apply,call是函数对象的方法,你想把谁绑定到this 就直接把它作为第一个参数传给apply或call就好了。

    具体用法,比如在我们公司的框架内有个util:

    onCreate: function() {
        var me = this;
        me.hideProvider = iAuto.Util.bind(me,me.hideProvider);
    },
    ...
    showProvider : function(){
            ...
            setTimeout(me.hideProvider,2000);
    },
    hideProvider : function(){
            ...
    },
    ...

    原因就是setTimeout内部的me已经变成全局上下文 window了!

    需要一开始就把this的私有方法绑定到this上,不让他转换上下文。

    这也就是apply和call的作用。


     ECMAScript规范给所有函数定义了两个方法call()和apply(),使用这两个方法可以像调用其他对象的方法一样调用函数。call()和apply()的第一个参数都是要调用的函数的对象,在函数体内这一参数是关链字this的值。call()的剩余参数是传递给要调用的函数的值。

  • 相关阅读:
    转载php在IIS中运行
    程序员必去的网站
    分享一下jQuery UI的地址
    dbcp相关配置
    shell学习第二弹-进阶
    shell学习第一弹-初识
    java servlet 3.0文件上传
    Junit使用第二弹
    各个数据库中,查询前n条记录的方法
    junit使用第一弹
  • 原文地址:https://www.cnblogs.com/haimingpro/p/4095105.html
Copyright © 2020-2023  润新知