数据类型判断 & 原型 & 原型链 & 手写new

  1. 数据类型
    在这里插入图片描述
  2. 类型判断
    注意:typeof能判断除null外的所有基本数据类型,引用类型需要使用instanceOf进行判断。
    Object和object进行区别,Object是功能完整的对象,object只是一个字符串
    万物皆对象!!!解释:除Object外所有引用数据类型的原型都是Object,
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述以下String都是上图中间个String
在这里插入图片描述

对象的隐式原型(_proto)指向构造该对象的构造函数的显式原型(protype)。a._proto_=String.prototype

typeof :返回一个表示数据类型的字符串。"number", "string","boolean","object","function","undefined"。所有引用类型(对象)返回都是object,例如对象、数组、时间,还有null

instanceof :用来测试一个   对象   在其原型链中是否存在一个引用数据类型。不能检测基本类型,只能检测实例(所有引用类型值都是Object的实例:数组、对象、用new创建的新函数)。可以区分数组(输出为Array)、日期(输出为Date)。查找继承的所有的prototype

constructor :可以判断所有类型(存在于__proto__属性中)。变量1.constructor==String  

Object.prototype.toString.call(obj) == '[object Object/Array/String/Number/Boolean/Null/Undefined]'   能够给出所有数据的类型

在这里插入图片描述
在这里插入图片描述

  1. 原型链
    在这里插入图片描述
function Test(){
	this.a = 1;
}
const test = new Test(); //此处反应对象也是方法
Test.prototype.b=2;   //test.hasOwnProperty('b')  时为true
Object.prototype.c=3  //test.hasOwnProperty('c')  时为false,但('a' in test)为true,在链上寻找
/*
test{
	a:1,
	__proto__:Test.prototype = {
		b:2,
		__proto__:Object.prototype = {
			c:3
			no __proto__(最顶层对象的prototype已经没有了原型链)
		}
	}
}
//由此可以看出,原型链是以对象为基准,以__proto__为链接点的链条,一直到Object。
*/
console.log(test.a)
console.log(test.b)
console.log(test.c)//以上三个都能打印,在本身对象内部找不到就会去链上找,原型链继承找法

console.log('a' in test)//
prototype:原型,是函数的一个属性,是一个对象
__proto__:原型链(  原型链接点   更形象),是对象Object(广义对象)的一个属性,是一个对象{},
对象(new出来的)的__proto__保存着该对象的constructor的prototype
函数一声明就有prototype属性
对象(new出来的)天生就有__proto__
  1. new 的过程
    文章:click
    视频:click
    new创建一个对象实例,对象可以是系统自带引用数据类型(Number、Object、String、Boolean…已经含有构造函数),也可以是自定义的
//通过new一个函数来创建一个对象实例,对象实例包含函数及函数上下文
//1. 创建一个空对象
//2. 把构造函数的原型绑定到新对象的原型上
//3. 构造函数被执行,执行过程中this被绑定到新对象上
//4.返回这个新对象,(构造函数中一般不会显示返回,但有时也可以 return this)
function Person(name){	
    this.name = name;
    console.log('2')
}
function newOperator(constructor,argument){
    const obj = {}
    Object.setPrototypeOf(obj,constructor.prototype)
    console.log('1')
    constructor.call(obj,argument) //此处执行构造函数
    console.log('3')
    return obj
}
const person1 = newOperator(Person , 'aaaa')  //创建的是Person的新对象
console.log(person1)  //返回为person对象,里面包含name和原型,详情如图

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值