zoukankan      html  css  js  c++  java
  • 每日一记(昨天的笔记)

    2016年11月08日

      (2016-11-08 20:42:24)[编辑][删除]
       
    今天是学习面向对象的第二天,作为学习前端开发人员,并且作为一个女生,学习前端很苦很累。就比如今天来说吧,老师让自己写代码,我突然发现我什么都不会了,这也是我注册博客的一个原因,把在学习过程中遇到的问题以及心得都总结一下,顺便整理一下笔记。
       今天学习了两大内容,分别是原型和继承。
       一、原型(实现同类的数据共享问题)
        1.概念:指函数的prototype属性所引用的对象。
            (1)只要定义一个函数,就会创建其原型
            (2)由上述函数创建出来的所有对象都可以直接访问到原型上的成员。
        2.作用:实现同类对象之间的数据共享。
        3.获取方式:
            函数:fnName.prototype
            对象:objName._ _proto_ _ 注意:以_ _开头和结尾的属性均为非标准属性,原型上默认具有constructor属性,引用的就是其构造函数。
         4.原型的特性
            (1)动态性:
                   在已有的原型上扩展成员,直接反映到已创建出来的对象上;如果置换了已有的原型那么会反映到后面新创建出来的所有对象,而不会影响之前创建的对象。
            (2)唯一性:由同一个构造函数创造出来的所有对象都共享一个原型。
            (3)不可变性:不能通过对象来修改原型上的成员。
            (4)共享性:所有的对象都可以直接访问其原型上的成员。
     二、继承
       1.概念:一个对象有权去访问另一个对象上的成员
       2.继承的实现:
        (1)原型式继承
        (2)混入式继承
      3.属性搜索原则:当访问某个对象的某个属性时,首先在对象本身上查找,如果找不到就返回并停止查找;如果没有找到就向其原型对象上查找,如果找到就返回值并停止查找;如果还没有找到就继续向其原型的原型对象上查找,直到object.prototype,此时如果找到就返回,否则就返回undefined.
    补充:几种数组去重方法
          第一种是比较常规的方法
    思路:
    1.构建一个新的数组存放结果
    2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比
    3.若结果数组中没有该元素,则存到结果数组中
    复制代码代码如下:
     
    Array.prototype.unique1 = function(){
     var res = [this[0]];
     for(var i = 1; i < this.length; i++){
      var repeat = false;
      for(var j = 0; j < res.length; j++){
       if(this[i] == res[j]){
        repeat = true;
        break;
       }
      }
      if(!repeat){
       res.push(this[i]);
      }
     }
     return res;
    }
    var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
    ;
     
    第二种方法比上面的方法效率要高
    思路:
    1.先将原数组进行排序
    2.检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置
    3.如果不相同,则将该元素存入结果数组中
    复制代码代码如下:
     
    Array.prototype.unique2 = function(){
     this.sort(); //先排序
     var res = [this[0]];
     for(var i = 1; i < this.length; i++){
      if(this[i] !== res[res.length - 1]){
       res.push(this[i]);
      }
     }
     return res;
    }
    var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
    ;
    第二种方法也会有一定的局限性,因为在去重前进行了排序,所以最后返回的去重结果也是排序后的。如果要求不改变数组的顺序去重,那这种方法便不可取了。
     
    第三种方法(推荐使用)
    思路:
    1.创建一个新的数组存放结果
    2.创建一个空对象
    3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。
    说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。
    复制代码代码如下:
     
    Array.prototype.unique3 = function(){
     var res = [];
     var json = {};
     for(var i = 0; i < this.length; i++){
      if(!json[this[i]]){
       res.push(this[i]);
       json[this[i]] = 1;
      }
     }
     return res;
    }
    var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
    ;
     
     
    第四种 hash方式去重
    var arr = [1, 2, 3, '1', '2', 1];
    function unique(arr) {
    var ret = [],
    hash = {};
    for(var i = 0,l = arr.length;i < l;i++){
    if(hash[ arr[i] ] !== typeof arr[i]){
    }
    }
    return ret;
    }
    var newArr = unique(arr);
    var arr=[1,2,3,'1','2',1];
    以空间换取时间
     
    第五种 indexof方式去重
    var arr = [1, 2, 3, '1', '2', 1];
    // 1: indexOf
    function unique(arr) {
    // 去重后的结果集
    var ret = [];
    // 遍历arr
    for(var i = 0,l = arr.length;i < l;i++){
    // arr[i]
    // 如果 结果集里不包含 当前遍历的元素值
    // 就将其添加到ret内。
    if(ret.indexOf(arr[i]) === -1){
    ret.push(arr[i]);
    }
    }
    return ret;
    }
    var newArr = unique(arr);
    console.log(newArr);2016年11月08日
     
     
    今天感觉自己不会,越不会越着急,越着急就越头疼,啊啊啊?我要逆袭,加油!
  • 相关阅读:
    s2-032批量脚本
    javascript 1
    threading模块和queue模块实现程序并发功能和消息队列
    Python标准库06 子进程 (subprocess包)
    常用服务对应的正则
    re
    requests
    198. 打家劫舍
    746. 使用最小花费爬楼梯
    70. 爬楼梯
  • 原文地址:https://www.cnblogs.com/fatimah1214/p/6048069.html
Copyright © 2011-2022 走看看