zoukankan      html  css  js  c++  java
  • js开发积累

    一、在js中遍历数组与其他语言的不同之处

    for(var x in myvars){

      alert(myvars[x]);//注意访问的方式不同 x才是数组下标 0,....

    }

    其他语言遍历类似这样的:

    foreach(数组名 as 键名->值)

    or

    foreach (数组名 as 值)

    二、js定义类以及其成员的方式

    <script>
    var Class = {
        create: function() {
            return 5;
        }
    }


    var RevealTrans = Class.create();//调用该函数的方式有点特别。做个记号
    alert(RevealTrans);//返回5
    </script>

    函数的两种不同使用形式:前面new 关键字与 没有 new

    关键概念:

    1.js中的函数与类都是同一个东西。因为没有类,类就是使用函数进行模拟实现其他语言类的方式

    2.JS中的所有function都是一样的,但是用途可能是不同的(用作构造对象抑或是执行一个过程)。
    使用new就是将函数模拟成类进行使用。不是有new,就相当于执行了该函数。
    ClassName就是一个函数,当出现在new后面的时候就作为一个构造函数来构造对象。

    3.在方法外部添加新变量
    var Class = {
        create: function() {
            return function() {
                this.initialize.apply(this , arguments);
            }
        }
    }
    var A = Class.create();//构造个一个function复制给A
    //A是一个function(),那么A. prototype,就是function中的一个变量 所以A.prototype表示在方法中添加一个新变量
    //该变量其实就是一个对象,该对象里面定义什么方法 那么function产生的对象就拥有什么方法。模型是大概的东西,可以以后变化的。很好理解这里使用模型。
    A.prototype={
        initialize:function(v){
            this .value=v;
        }
        showValue:function(){
            alert(this.value);
        }
    }

    ///////////////////////////////////////////
    var A = Class.create();等价于如下代码:


    var A = function() {
                this.initialize.apply(this , arguments);
            }
    测试后,上面这样使用也是可行的。只是考虑到代码扩展性,就使用了Class.create()

    ///////////////////////////////////////////


    A.prototype = {
    initialize:function(v){
            this .value=v;
        }

    }
    就相当于对A增加一些方法了 执行上面代码后,A对象的结果改变后,等价于:

    ////////////////////////////////////

    A.prototype = {

       function() {
                this.initialize.apply(this , arguments);
            }//在原来基础上的
      initialize:function(v){
            this.value=v;
        }

    }

    通俗地理解是:针对A对象增加了一个方法——initialize()


    ///////////////////////////////////

    由于js中将所有的东西都看成对象。那么下面这样使用就不奇怪了:

    var a = new A("hello world");

    arguments参数:


    function test()
    {
       
    alert(arguments[0]);   
    }

    test("abc");//返回abc
    所有传递给函数的参数都隐式地保存在arguments数组中 调用格式是:当前正在执行的对象.arguments[n]


    可以这样理解:
    ///////////////////////
    arguments[0]等价于:
    test.arguments[0].
    在使用的时候为什么不能这样用:

    alert(this.arguments[0]);//报错:未定义   
    /////////////////////////


    call和apply总结:
    说明白一点其实就是更改对象的内部指针,即改变对象的this指向的内容。
    call函数和apply方法的第一个参数都是要传入给当前对象的对象,及函数内部的this。后面的参数都是传递给当前对象的参数。

    格式:

    要继承的对象.call(当前对象); 通俗理解:当前什么对象继承"要继承的对象"

    例子:
    function parent(){
    this.a="a";
    this.b="b";
    }
    function child(){
    parent.call(this);//把this指向的内容替换成parent中this指向的内容。就是实现指针替换。
    }
    var c = new child();
    alert(c.a); //c.a可以看成去访问parent方法里面的this了。因为child方法中有call方法
        alert(c.b);

    个人理解:js中没有类的概念。所有东西都是对象。所有就无法像其他语言一样,可以使用extends实现类继承。js的call和apply方法可以实现继承的功能

    概念总结:

    js将所有东西都看成是对象。函数是对象的一种形式。函数也看成是一种变量。

    可以只输出函数名,而不写函数后面的括号(),实现调用。在一本ajax_IBM书中就提到:
    onreadystatechange=updatePage;//这里使用updatePage就可以完成对函数updatePage()进行调用。

    原因是什么,书上说大致意思是:因为js是一种弱类型的语言。这就意味着,可以用变量引用任何东西。JavaScript 也将该函数名看作是一个变量。

    关于弱类型语言的整体思考:

    php也是一门弱类型的语言。在调用类的时候。类名大小写是没关系的。比如,类名是Page,而使用 new page也是能够生效的。联想到在php手册中提到一个意思,大致是:函数名不区分大小写的。也就是调用函数的时候,大小写之间的区别是不会影响使用的。

    是不是可以这样理解:一般弱类型语言方法有没有括号不会受到影响。大小写只差也不会导致出错呢?

    ----------------------------------------------- Created By 王滔 专注于互联网系统开发 原创文章,转载注明出处, -----------------------------------------------
  • 相关阅读:
    Java网络技术-待续
    Java输入输出技术
    Java数据库技术
    Java安全技术
    Java异常、事件、多线程
    网站产品设计
    C#-委派和事件
    Quartz 触发器(SimpleTrigger&CronTrigger )配置说明 & cronExpression表达式 转
    weblogic出现response already committed(转)
    Weblogic二种修改端口的方法(转)
  • 原文地址:https://www.cnblogs.com/wangtao_20/p/1921216.html
Copyright © 2011-2022 走看看