• 原型链整理


    /*判断类型*/
        function show(x){
            /*undefined,number,string,boolean属于简单的值类型,值类型的判断用typeof*/
            console.log(typeof x);//undefined
            console.log(typeof 10);//number
            console.log(typeof 'abc');//string
            console.log(typeof true);//boolean
            /*函数,数组,对象,null,new Number(10)都是对象,都是引用类型,引用类型的判断用instanceof*/
            /*一切引用类型都是对象*/
            console.log(typeof function(){});//function
            console.log(typeof [1,'a',true]);//object
            console.log(typeof {a:10,b:20});//object
            console.log(typeof null);//object
            console.log(typeof new Number(10));//object
    
            console.log(function(){} instanceof Object);//true
            console.log( [1,'a',true] instanceof Object);//true
            console.log({a:10,b:20} instanceof Object);//true
            console.log(null instanceof Object);//false
            console.log(new Number(10) instanceof Object);//true
        }
    
    /*对象都是通过函数创建的*/
        var  obj={a:10,b:2};
        var obj=new Object();/*代码的本质*/
            obj.a=10;
            obj.b=20;
        /*每个函数都有一个属性叫prototype,这个prototype的属性值是一个对象(属性的集合)
        * 默认的只有一个叫做constructor的属性指向这个函数本身*/
            function  name(){
                console.log(555)
            }
            name.prototype.liuhao=function(){
                console.log(555555)
            }
            console.log(name.prototype)/
            console.log(name.prototype.constructor)
        /*Fn是一个函数,fn对象是从Fn函数new出来的,这样fn对象就可以调用Fn.prototype中的属性*/
        function Fn(){}
        Fn.prototype.name="liuhao";
        Fn.prototype.getYear=function(){
            return 1998;
        }
        var fn=new Fn();
        console.log(fn.name)
        console.log(fn.__proto__===Fn.prototype)//__proto__:隐式原型
        /*每个函数function都有一个prototype,即原型。每个对象都有一个__proto__,隐式原型*/
        /*每个对象都有一个__proto__属性,指向创建该对象的函数的prototype*/
        /*Object.prototype确是一个特例--它的__proto__指向的是null*/
        /*函数是谁创建出来的--是Function*/
        function fn2(x,y){
            return x+y;
        }
        console.log(fn2(1,2));
        var fn1=new Function("x",'y',"return x+y");

    /*instanceof  A instanceof B
    * instanceof 的判断规则是:沿着A的__proto__这条线来找,同时沿着B的prototype
    * 这条线来找,如果这两条线能找到同一个引用,即同一个对象,那么就返回true
    * 如果找到终点还未重合,则返回false
    * instanceof 表示的就是一种继承关系,或者原型链的结构
    * 访问一个对象的属性时,先在基本属性中查找,如果没有,再沿着__proto__这条链
    * 向上找,这就是原型链
    * */

      

  • 相关阅读:
    二、JVM — 垃圾回收
    一、JVM — Java内存区域
    四、JVM — 类文件结构
    java 如何重写equal 和hashcode方法(最佳实践)
    Java关于继承中的内存分配
    Linux — 基础知识
    Zookeeper — 应用场景
    分布式服务接口请求的顺序性如何保证?
    如何设计一个高并发系统?
    索引策略
  • 原文地址:https://www.cnblogs.com/liuhao-web/p/7154158.html
Copyright © 2020-2023  润新知