【JS】typeof 和 instanceof(原型,原型链)

typeof

typeof运算符主要是返回运算数类型信息的字符串,可用于判断基本类型和引用类型
返回值有一下六种情况

运算数类型typeof(x)的返回值
数字number
字符串string
布尔值boolean
函数function
对象,数组,正则和nullobject
未定义undefined

用法示例:
typeof(123) = "number"

instanceof

instanceof的返回值只有两种情况,ture 或者 false
instanceof判断一个变量是不是某个对象的子类,会沿着原型链__proto__向上找,如果找到匹配的对象,就返回true,否则返回false。


到这里就要提到原型和原型链了。先了解部分概念:

  1. 构造函数:
    所谓的构造函数其实就是一个普通的函数前面加了new运算符,其实质也是一个函数,所以构造函数都有函数的prototype属性。
    构造函数的目的就是为了创建一个自定义类,并且创建这个类的实例( 实例就是通过构造函数创建出来的对象。),并且实例与实例之间相互独立,即实例识别。
    构造函数和普通函数的区别:

    数名书写习惯不同函数调用方式不同
    函数小驼峰命名
    函数大驼峰命名
    //创建了一个自定义类,并且创建了这个类的实例
    function Dog(name, age, gender){
    	this.name = name;
    	this.age = age;
    	this.gender = gender;
    	this.sayName = function (){
    		console.log(this.name)
    	}
    }
    var dog = new Dog("旺财",4,"雌")
    console.log(dog)
    

    在这里插入图片描述
    要记住两句话:dog是构造函数 Person 的实例,实例的构造函数属性(constructor)指向构造函数。
    也就是说,通过这个构造函数去创建新的实例的时候,都会为这个实例创建一个sayName方法,消耗内存,而这个sayName方法是一模一样的,所以可以把这个方法单独放在一个地方供所有实例去访问,这就需要原型

  2. 原型
    javascript中,每当定义一个函数的时候,都会天生自带一个__proto__属性,这个属性指向函数的原型对象
    原型指的就是原型对象,至于是谁的原型对象,需要靠函数的prototype属性和实例的__proto__属性来区别。

  3. 原型链
    指从一个实例对象开始往上找,这个实例对象的__proto__属性所指向的则是这个实例对象的原型对象,如果用obj表示这个实例,则原型对象表示为obj.proto。同时,这个原型对象顾名思义也是一个对象,而且它也有上一级的原型对象,相对于上一级原型对象而言,它也是一个实例对象,那么它也拥有__proto__属性,它的__proto__属性也指向它的原型对象,后面也以此类推,一直到Object.prototype这个原型为止,Object.prototype为原型链的末尾点。
    js里完全依靠"原型链"(prototype chain)模式来实现继承
    Object是作为众多new出来的实例的基类 function Object(){ [ native code ] }
    Function是作为众多function出来的函数的基类 function Function(){ [ native code ] }
    构造函数的proto(包括Function.prototype和Object.prototype)都指向Function.prototype
    原型对象的proto都指向Object.prototype
    Object.prototype.proto指向null

    参考:https://blog.csdn.net/yin_991/article/details/80954453

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值