美文网首页
javascript基础学习笔记2

javascript基础学习笔记2

作者: Shinemax | 来源:发表于2018-02-12 12:25 被阅读0次

    继承发展史

    1.传统形式—>原型链
    过多的继承了没用的属性

    2.借用构造函数
    不能继承借用构造函数的原型
    每次构造函数都要多走一个函数

    3.共享原型
    不能随便改变自己的原型

    4.圣杯模式

    传统形式

    
    Grand.prototype.lastName = 'li';
    
    function Grand(){};
    
    var grand = new Grand();
    
    Father.prototype = grand;
    
    function Father() {
      this.name = 'ga';
    }
    
    var father = new Father();
    
    Son.prototype = father;
    
    function Son(){};
    
    var son = new Son();
    
    

    借用构造函数

    
    function Person (age,sex,name) {
      this.age = age;
      this.sex = sex;
      this.name = name;
    }
    
    function Chen (age,sex,name,job) {
      Person.call(this,age,sex,name);
      this.job = job;
    }
    
    var chen = new Chen('18','男','陈旭锋','程序员');
    
    

    共享原型

    
    function Father () {};
    
    function Son () {};
    
    Son.prototype = Father.prototype;
    
    

    圣杯模式

    
    var inherit = (function () {
      var F = function ();
      return function (Target, Origin) {
        F.prototype = Origin.prototype;
        Target.protype = new F();
        Target.prototype.constructor = Target;
        Target.prototype.uber = Origin.prototype;
      }
    }());
    
    

    arguments

    1.arguments.callee
    指向函数自身

    2.function.caller
    指向函数自身

    数组

    改变原数组的方法
    1.push:向数组最后位置添加元素
    2.pop:使数组长度减一,并返回最后一个元素,如果数组为空 ,则不改变数组长度,返回undefined。
    3.shift:使数组长度减一,并返回第一个元素,如果数组为空 ,则不改变数组长度,返回undefined。
    4.unshift: unshift() 方法将把它的参数插入 arrayObject 的头部,并将已经存在的元素顺次地移到较高的下标处,以便留出空间。该方法的第一个参数将成为数组的新元素 0,如果还有第二个参数,它将成为新的元素 1,以此类推。
    5.sort:对数组进行排序,可以重写里面的排序方法,如果要升序可以返回正数,降序则相反。
    6.reverse:将数组倒序。
    7.splice:三个参数,第一个参数是从什么位置开始,第二个参数是切割几位,第三个参数是往里面添加的元素。

    不改变原数组的方法
    1.concat:将1个数组拼接在另外的一个数组上,返回一个新的数组。
    2.join:将数组通过参数连接起来,每个间隔都会有参数,返回一个新的数组。
    3.split:通过参数将数组分割开来,返回一个新的数组。
    4.toString:将数组以字符串的形式输出。
    5.slice:返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。

    类数组

    arguments是类数组(具有数组和对象两种性质)。
    属性要为索引(数字)属性,必须要有length属性,最好加上一个splice和push

    //类数组
    obj = {
        "1": "a",
        "2": "b",
        "3": "c",
        "length": 3,
        "name": "chen",
        "age": "21",
        "splice": Array.prototype.splice,
        "push": Array.prototype.push
    }
    
    试题
    var obj = {
        "2": "a",
        "3": "b",
        "length": 2,
        "push": Array.prototype.push
    }
    
    obj.push("c");
    obj.push("d");
    
    //push上的方法
    Array.prototype.push = function (target) {
        obj[obj.length] = target;
        obj["length"]++;
    }
    
    //obj结果
    obj = {
        "2": "c",
        "3": "d",
        "length": 4,
        "push": Array.prototype.push
    }
    

    对象的深拷贝和浅拷贝

    1.浅拷贝

    function clone(origin, target) {
        var target = target || {};
        for (var prop in origin) {
            target[prop] = origin[prop];
        }
        return target;
    }
    

    2.深拷贝

    function deepClone(origin, target) {
        var target = target || {},
            toStr = Object.prototype.toString,
            arrStr = "[object Array]";
        for (var prop in origin) {
            if (origin.hasOwnProperty(prop)) {
                if (origin[prop] !== 'null' && typeof (origin[prop]) == 'object') {
                    target[prop] = toStr.call(origin[prop]) == arrStr ? [] : {};
                    deepClone(origin[prop], target[prop]);
                } else {
                    target[prop] = origin[prop];
                }
            }
        }
        return target;
    }
    

    相关文章

      网友评论

          本文标题:javascript基础学习笔记2

          本文链接:https://www.haomeiwen.com/subject/vrmrtftx.html