JavaScript----原型链

原型链

概述

  • prototype 每个函数都有一个prototype属性,被称为显示原型
  • . _ proto _ 每个实例对象都会有_ proto 属性,其被称为隐式原型 每一个实例对象的隐式原型 proto
    _属性指向自身构造函数的显式原型prototype
  • 任何对象都是由一个构造函数创建的,被创建的对象都可以获得构造函数的prototype属性

注意:对象是没有prototype属性,只有方法才有prototype属性

什么是原型链?

在获取对象属性时,如果对象本身没有这个属性,那就会去他的原型__proto__上去找,就一层层的扒出创建对象的构造函数,直至到Object时,就没有_proto_指向了,_proto_实质找的是prototype,所以只要找这个链条上的构造函数的prototype,Object.prototype对象属性值为null

示例

    //内置对象的原型链
    var arr = [];
    console.log(arr);

   //从内置对象上可以观察到
    //实例化的当前对象
    //__proto__  原型链  指向自身的 构造函数的原型对象
    //原型对象上具有
    //原型属性以及原型方法  构造函数constructor  指向函数本身

    console.log(arr.__proto__);  //Array
    console.log(arr.__proto__.__proto__);  //object
    console.log(arr.__proto__.__proto__.__proto__);  //null
    console.log(arr.__proto__ == Array.prototype);//true
    console.log(arr.__proto__.__proto__ == Object.prototype);//true

示例

    function Method() {
    
    }
	var p = new  Method();
	//方法才有prototype,普通对象无prototype
	console.log(Method.prototype); // Object{
    
    } 
	console.log(p.prototype); // undefined
	
	//任何对象都是有构造函数constructor,由构造函数创建的对象也可以获得构造函数的引用
	//此处只是打印下列对象的构造函数是什么。
	console.log(p.constructor); //function  Method(){
    
    }  
	console.log( Method.constructor); //function Function(){
    
    } 
	console.log({
    
    }.constructor); // function Object(){
    
    }
	console.log(Object.constructor); // function Function() {
    
    }
	console.log([].constructor);  //function Array(){
    
    }

猜你喜欢

转载自blog.csdn.net/weixin_47863547/article/details/114700769