javascript语言精粹读书笔记



  1. 运用继承减少内存和时间消耗。
  2. var ob=s ||"unknow";相当于默认值
  3. var ob= s && s.img 防止出现s.img无值导致的typerror,结果为undefine
  4. 对象永远不能被复制,而是被引用
  5. typedef flight.number //'number',但是在原型链中任何属性都会是'function'或者 用 object 具有带指定名称的属性,则 hasOwnProperty 方法返回 true,否则返回 false 此方法不会检查对象原型链中的属性;该属性必须是对象本身的一个成员。

  1. 函数会自动生成两个参数this和arguments。arguments没有任何方法,因为是类数组的对象,有length属性
  2. 方法调用,可以通过this来获取对象的上下文,通过this来取得对象上下文的方法称为public method
  3. 函数调用add(3,4),通过这种调用this指向window,所以若有内外函数时,用this赋给var that,来传递this指针
  4. 构造函数调用,通过new 的形式,约定以大写字母开头。返回this指针
  5. Apply调用,javascript是函数式面向对象,函数可以有方法,apply就是函数的方法,第一个参数选择this,第二个参数是传的参。如:add.apply(null,[3,4]);//为7,传参以数组形式
  6. 可以在object.prototype.method,Number,String,Function等的prototype来添加原型的方法来扩充功能,为了不与其他类库冲突,应该先检测。
  7. 闭包例子,因为内函数会获得外函数里的变量,所以不会出现复制变量
    var add_the_handlers=function(nodes){
        var helper = function (i){
            return function (e) {
                alert(i);
            }
        };
        var i;
        for ( i = 0 ; i < nodes.length ; i+=1) {
            nodes[i].onclick = helper(i);
        }
    };
    就是每一onclick个产生一个新函数.
模块模式,利用闭包创建可以访问私有变量和函数的特权函数,最后返回这个特权函数。
String.prototype.deentityify= function(){
    var entity = {
        quot : '"',
        lt:'<',
        qt:'>'
    };
return function(){
    return this.replace(/&([^&;]+);/g,
        function(a,b){
            var r= entity[b];
            return typeof r==='string'?r:a;
        }
    );
}
}();
  • 继承
  1. 传参的时候,以function({first:"ss",second:"12"});更易阅读
  2. 可以通过在函数中定义一个对象,来保证私有,一个特权对象来操作,返回这个特权对象

  1. 6种值会为假(==false),分别是false,null,undefined,' ',0,NaN
  2. number类型总是64位浮点数,两个整数相除也可能出现非整数结果
  3. 通用递归记忆函数,加入一个记忆参数,可以减少递归函数的调用次数,显著提高效率 
    var memoizer = function (memo,fundamental) {
          var  shell = function (n) {
             var result = memo[n];
            if(typeof result !== 'number') {
               result = fundamental(shell,n);
              memo[n] = result;
            }
          return result;
          };
          return shell;
    };
    调用:
     var fibonacci = memoizer([0,1],function(shell,n){
          return shell(n-1)+shell(n-2);
    });
    console.log(fibonacci(10));
  4. 是否数组检测
     var is_array = function (value) {
        return value &&
       typeof value === 'object' &&
       typeof value.length === 'number' &&
      typeof value.splice === 'function' &&
     !(value.propertyIsEnumerable('length'));
    };
  1. 运用继承减少内存和时间消耗。
  2. var ob=s ||"unknow";相当于默认值
  3. var ob= s && s.img 防止出现s.img无值导致的typerror,结果为undefine
  4. 对象永远不能被复制,而是被引用
  5. typedef flight.number //'number',但是在原型链中任何属性都会是'function'或者 用 object 具有带指定名称的属性,则 hasOwnProperty 方法返回 true,否则返回 false 此方法不会检查对象原型链中的属性;该属性必须是对象本身的一个成员。

  1. 函数会自动生成两个参数this和arguments。arguments没有任何方法,因为是类数组的对象,有length属性
  2. 方法调用,可以通过this来获取对象的上下文,通过this来取得对象上下文的方法称为public method
  3. 函数调用add(3,4),通过这种调用this指向window,所以若有内外函数时,用this赋给var that,来传递this指针
  4. 构造函数调用,通过new 的形式,约定以大写字母开头。返回this指针
  5. Apply调用,javascript是函数式面向对象,函数可以有方法,apply就是函数的方法,第一个参数选择this,第二个参数是传的参。如:add.apply(null,[3,4]);//为7,传参以数组形式
  6. 可以在object.prototype.method,Number,String,Function等的prototype来添加原型的方法来扩充功能,为了不与其他类库冲突,应该先检测。
  7. 闭包例子,因为内函数会获得外函数里的变量,所以不会出现复制变量
    var add_the_handlers=function(nodes){
        var helper = function (i){
            return function (e) {
                alert(i);
            }
        };
        var i;
        for ( i = 0 ; i < nodes.length ; i+=1) {
            nodes[i].onclick = helper(i);
        }
    };
    就是每一onclick个产生一个新函数.
模块模式,利用闭包创建可以访问私有变量和函数的特权函数,最后返回这个特权函数。
String.prototype.deentityify= function(){
    var entity = {
        quot : '"',
        lt:'<',
        qt:'>'
    };
return function(){
    return this.replace(/&([^&;]+);/g,
        function(a,b){
            var r= entity[b];
            return typeof r==='string'?r:a;
        }
    );
}
}();
  • 继承
  1. 传参的时候,以function({first:"ss",second:"12"});更易阅读
  2. 可以通过在函数中定义一个对象,来保证私有,一个特权对象来操作,返回这个特权对象

  1. 6种值会为假(==false),分别是false,null,undefined,' ',0,NaN
  2. number类型总是64位浮点数,两个整数相除也可能出现非整数结果
  3. 通用递归记忆函数,加入一个记忆参数,可以减少递归函数的调用次数,显著提高效率 
    var memoizer = function (memo,fundamental) {
          var  shell = function (n) {
             var result = memo[n];
            if(typeof result !== 'number') {
               result = fundamental(shell,n);
              memo[n] = result;
            }
          return result;
          };
          return shell;
    };
    调用:
     var fibonacci = memoizer([0,1],function(shell,n){
          return shell(n-1)+shell(n-2);
    });
    console.log(fibonacci(10));
  4. 是否数组检测
     var is_array = function (value) {
        return value &&
       typeof value === 'object' &&
       typeof value.length === 'number' &&
      typeof value.splice === 'function' &&
     !(value.propertyIsEnumerable('length'));
    };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值