zoukankan      html  css  js  c++  java
  • javascript 语言精粹 学习笔记

    chapter 3: 对象

    1. null and undefine
      null 是对象使用;undefined是属性使用
      var obj = {"first":"Kevin","last":"Ge"}
      判断是否是null      if(obj["middle"] == null)
      判断是否是undefine  if(typeof obj["middle"] == "undefine")
              或   if(obj["middle"] === undefine)
    2. 属性默认值
      var middle = obj["middle"] || "null";
    3. 更新
      如果属性存在就更新,如果属性不存在,就新建这个属性
      var obj["first_name"] = "first_name";
      obj.nickname = "Fatty";
    4. 对象通过引用传递,值永远不会被拷贝
    5. 原型
      如果我们尝试去获取对象的某个属性值,且该对象没有此属性,那么javascript会尝试着从原型对象中获取属性值。如果那个原型对象也没有该属性,那么再从它的原型中寻找,依次类推,直到该过程最后到达终点Object.prototype
      if(typeof Object.beget !== 'function')
      {
      Object.beget == function(o)
      {
      var F = function(){};
      F.prototype = o;
      return new F();
      };
      }
      var another_obj = Object.beget(obj);
    6. 反射
      1.typeof 检测所有属性(包括原型属性)
      typeof obj["first"] //string
      hasOwnProperty 仅检测自己的属性,不会检测原型属性
    7. 属性和数组
      属性:var obj = {"first":"Kevin","last":"Ge"}
      数组:var obj = ["kevin","Ge"]
    8. 用 for in 遍历属性(包括原型)
      var name;
      for(name in another_obj)
      {
      typeof another_obj[name] !== 'function'
      {//do something ....}
      }
    9. 删除自有属性
      自有属性是相对于原型属性而言,如果没有改变原型属性,仅引用原型属性;如果改变了原型属性,那么就会创建一个新的自有属性
      another_obj.nickname = "new nickname";
      delete another_obj.nickname;
      //use the original nickname in prototype
    10. 减少全局变量的污染//没有理解
      var MYAPP = {};
      MYAPP.obj = {"first":"Kevin","last":"Ge"}

    Chapter 4: 函数

    1. 函数也是对象
      因为函数是对象,所以它们可以像任何其他的值一样被使用。函数可以存放在变量,对象和数组中。函数可以被当做参数传递给其他函数,函数也可以再返回函数。而且,因为函数是对象,所以函数可以拥有方法。
    2. 函数参数
      如果函数参数过多,超出的参数就会被忽略
      如果函数参数过少,缺失的值就为undefined
    3. 当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到对象。
      var myObject = 
      {
      value: 0,
      increment: function(inc)
      {this.value += typeof inc === 'number'? inc:1;}
      };
      myObject.increment();
      alert(myObject.value);//1
      myObject.increment(2);
      alert(myObject.value);//3

      myObject.double = function(){var helper = function()} 

    4. 关于this
      方法是可以使用this,但方法里面的函数就不能使用this,需要加个属性过渡一下
      myObject.double = function()
      {
      var that = this;
      var helper = function(){that.value = add(that.value,that.value);};
      helper();
      }
      myObject.double();
      alert(myObject.value);//6  3+3
    5. new构造器调用模式
      如果在一个函数前面带上new来调用,那么将创建一个隐藏连接到该函数的prototype成员的新对象,同时this将会被绑定到那个新对象上。
    6. apply调用模式
      apply方法接收两个参数。1:将被绑定给this的值 2:参数数组
    7.  arguments数组
      通过arguments数组可以访问所有函数被调用时传递给它的参数列表
      var sum = function()
      {
        var i, sum =0;
        for(i=0;i<arguments.length;i++)
        {sum += arguments[i];}
        return sum;
      }
      alert(sum(1,2,3,4));//10
    8. 给类型增加方法
      Function.prototype增加方法,使得该方法对所有函数可用:
      Function.prototype.method = function(name, func)
      {
        if(!this.prototype[name])
        {
          this.prototype[name] = func;
        }
      }
      Number.method('integer',function(){return Math[this<0?'ceiling':'floor'](this);})
      (-10/3).integer();
      String.method('trim',function(){return this.replace(/^s+|\s+$/g,'');});
      "   neat    ".trim();
    9. 闭包
      函数可以访问它被创建时所处的上下文环境,这被称为闭包。
  • 相关阅读:
    changing a pointer rather than erasing memory cells
    验证码识别 edge enhancement 轮廓增强 region finding 区域查找
    Manipulating Data Structures
    passing parameters by value is inefficient when the parameters represent large blocks of data
    Aliasing 走样
    Artificial Intelligence Research Methodologies 人工智能研究方法
    Thread safety
    include pointers as a primitive data type
    flat file
    functional cohesion
  • 原文地址:https://www.cnblogs.com/kevinge/p/1780507.html
Copyright © 2011-2022 走看看