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. 闭包
    函数可以访问它被创建时所处的上下文环境,这被称为闭包。

 

 

 

 

 

转载于:https://www.cnblogs.com/kevinge/archive/2010/07/19/1780507.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值