javascript权威指南笔记学习

 

    //返回了一个继承自原型对象p的属性的新对象
    function inherit(p){
        if (p ==null) throw TypeError();
        if (Object.create){
            return Object.create(p);
        }
        var t=typeof p;
        if (t!=="object"&&t!=="function") throw TypeError();
        function f(){};
        f.prototype=p;
        return new f();
    }

属性访问错误

属性访问并不总是返回或设置一个值。查询一个不存在的属性并不会报错,如果在对象o自身的属性或继承的属性中均未找到这个属性x,属性访问表达式o.x返回undefine。回想一下我们的book对象有属性“sub-title”,而没有属性“subtitle”:

book.subtitle    undefined

试图查询这个不存在的对象的属性就会报错。null和undefined值都没有属性,因为查询这些值的属性会报错,接上例:

//抛出一个类型错误异常,undefined没有length属性

var len=book.subtitle.length;

除非确定book和book.subtitle都是(或在行为上)对象。否则不能这样写表达式book。subtitle.length,因为这样会报错,下面提供了两种避免出错的方法。

var len=undefined;

if(book){

   if(book.subtitle) len=book.subtitle.length;

}

var len=book&&book.subtitle&&book.subtitle.length;

//判断类型

function classof(o){
if(o===null){retuen "Null"}
if(o===undefined){return "Undefined"}
return Object.prototype.toString().call(o).slice(8,-1)

} 

 

  function inherit(p){
        if (p ==null) throw TypeError();
        if (Object.create){
            return Object.create(p);
        }
        var t=typeof p;
        if (t!=="object"&&t!=="function") throw TypeError();
        function f(){};
        f.prototype=p;
        return new f();
    }
 function range(from,to){
        var r=inherit(range.method);
        r.from =from;
        r.to=to;
        return r
 }
 range.method={
     include:function(x){
         return this.from<=x&&this.to>=x;
     },
     foreach:function(f){
         for (var x=Math.ceil(this.from);x<=this.to;x++)
             f(x)
     },
     toString:function(){
         return  "("+this.from +'...'+this.to+')';
     }
 }
 var r= range(1,3);
 console.log(r.include(2));
 r.foreach(console.log);
 console.log(r);
 var b=range(2,4);
 console.log(b);
 console.log(r)

//上面这段代码有利于深入了解inherit这个函数,由函数生成的对象的是一个具有自己地址的对象。

 

function type(o){
    var t,c,n;
    if (o==null) return "null";
    if (o!==o) return "nan";
    if (t = typeof o!=="object") return t;
    if ((c = classof(o))!=="Object") return c;
    if (o.constructor&&typeof o.constructor==="function"&&(n = o.constructor.getName()))
        return n;
    return "Object"
};

 

Function.prototype.getName =function(){
    if ("name" in this) return this.name;
    return this.name=this.toString().match(/function\s*([^(]*)\(/)[1]
}
function classof(o){
return Object.prototype.toString.call(o).slice(8,-1); 
}

 

 

 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

//赋值失败,但没报错,Object.prototype没有修改

 

删除属性

delete运算符,

delete book.author

delete book["main title"]

 

---恢复内容结束---

    //返回了一个继承自原型对象p的属性的新对象
    function inherit(p){
        if (p ==null) throw TypeError();
        if (Object.create){
            return Object.create(p);
        }
        var t=typeof p;
        if (t!=="object"&&t!=="function") throw TypeError();
        function f(){};
        f.prototype=p;
        return new f();
    }

属性访问错误

属性访问并不总是返回或设置一个值。查询一个不存在的属性并不会报错,如果在对象o自身的属性或继承的属性中均未找到这个属性x,属性访问表达式o.x返回undefine。回想一下我们的book对象有属性“sub-title”,而没有属性“subtitle”:

book.subtitle    undefined

试图查询这个不存在的对象的属性就会报错。null和undefined值都没有属性,因为查询这些值的属性会报错,接上例:

//抛出一个类型错误异常,undefined没有length属性

var len=book.subtitle.length;

除非确定book和book.subtitle都是(或在行为上)对象。否则不能这样写表达式book。subtitle.length,因为这样会报错,下面提供了两种避免出错的方法。

var len=undefined;

if(book){

   if(book.subtitle) len=book.subtitle.length;

}

var len=book&&book.subtitle&&book.subtitle.length;

//判断类型

function classof(o){
if(o===null){retuen "Null"}
if(o===undefined){return "Undefined"}
return Object.prototype.toString().call(o).slice(8,-1)

} 

 

 

 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

//赋值失败,但没报错,Object.prototype没有修改

 

删除属性

delete运算符,

delete book.author

delete book["main title"]

 

posted @ 2017-04-07 23:22  莺哥  阅读(250)  评论(0编辑  收藏  举报