原型链

2019-02-27  本文已影响0人  Christoles

1. 什么是原型链?

原型链:
  当我们需要调用一个变量的时候,那么JS会给我们提供一个搜索机制,从当前的作用域范围内进行查询;
  如果没有,则继续往上查询,直到查出来为止;
  如果全局作用域内都没有这个变量的时候,就结束查找;
  像这样当前作用域内往全局作用域一层一层往上查找形成的链,我们称为原型链(也称为作用域链)

2. 运用 --- 检查数组类型

var arr4 = new Array();

console.log(Object.prototype.toString.call(arr4));//[object Array]
console.log(arr4.prototype);//undefined  --- 说明原型没有这个方法

console.log(arr4.__proto__);//[skill1: ƒ... 获取到实例化对象的构造函数   
console.log(arr4.__proto__.__proto__);//{constructor: ƒ... 获取到实例化对象的构造函数的父级(对象)。 
console.log(arr4.__proto__.__proto__);//null  --- 说明所有东西都是从无到有的 

console.log(Array.__proto__);//ƒ () { [native code] }

3. 运用 --- 查找父级

//原型链 查找
    //函数
        function fun(){
            return 1;
        }
        console.log(fun.__proto__);//function
        console.log(fun.__proto__.__proto__);//{constructor: ƒ...
    //数值
        var num = new Number();
        console.log(num.__proto__)//Number {...
        console.log(num.__proto__.__proto__)//{constructor: ƒ...
        console.log(num.__proto__.__proto__.__proto__)//null  
    //数组        
        var arr6 = [1,2,3];
        console.log(arr6.__proto__);//[skill1: ƒ...

4. 运用 --- 属性改造

属性:

var arr3 = new Array(5);
    console.log(arr3);//[empty × 5] --- 长度为5的空数组
    console.log(arr3[2]);//undefined

//constructor           
console.log(arr3.constructor);//ƒ Array() { [native code] }

            //测试arr4能否调用arr3的方法         
            arr3.skill = function(){
                console.log("hello world!")
            }
            arr3.skill();//hello world!     
            var arr4 = new Array();
            //arr4.skill();// arr4不能调用arr3的方法 ---> 报错 

//prototype         
Array.prototype.skill1 = function(){
    console.log("人啊!!!");
}
//通过prototype改造函数后,再调用方法,两个实例化对象都可以打印出来。
arr3.skill1();//人啊!!!
arr4.skill1();//人啊!!!

1.神话传说

image.png image.png
上一篇下一篇

猜你喜欢

热点阅读