原型链

  • 创建对象有几种方法
  • 原型,构造函数,实例,原型链
  • instanceof的原理
  • new运算符
创建对象有几种方法
            //第一种方式:字面量
            var o1={name:'o1'};
            var o2=new Object({name:'o2'});
            //第二种方式:通过构造函数
            var M=function(name){this.name=name};
            var o3=new M('o3');
            //第三种方式:Object.create
            var p={name:'p'};
            var o4=Object.create(p);//答出来加分!!


为什么o4对象没有显示name,因为o4本身是一个空对象,通过Object.create()把o4的proto指向传入对象,也就是说传入的对象为o4的原型。所以o4本身是没有name属性的,通过原型链查找到p才会有name属性。

原型,构造函数,实例,原型链
instanceof的原理

原理:判断实例对象的protp与构造函数的prototype引用的是不是同一个地址。
只要是在一条原型链上的都会返回true。


怎么区分是哪个对象的实例

用constructor比用instanceof要严谨一些。

new运算符
        <script type="text/javascript">
            //第一种方式:字面量
            var o1={name:'o1'};
            var o2=new Object({name:'o2'});
            //第二种方式:通过构造函数
            var M=function(name){this.name=name};
            var o3=new M('o3');
            //第三种方式:Object.create
            var p={name:'p'};
            var o4=Object.create(p);
            
            //new的本质
            var new2=function(func)
            {
                var o=Object.create(func.prototype);
                var k=func.call(o);
                if(typeof k==='object')
                {
                    return k;
                }else{
                    return o;
                }
            }
        </script>

注意:若构造函数中没有返回值或返回值是基本类型(Number、String、Boolean)的值,则返回新实例对象;若返回值是引用类型的值,则实际返回值为这个引用类型。


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容