2021-07-19

38 阅读2分钟

谈谈js的原型链

js的原型链是属于原理的一部分,当然,对于我们这种初学者掌握的只有一点理论知识,所以就更加迫切的需要我们深入了解原型链。

要了解原型链,那我们先看看原型是什么呢:原型就是一个对象,对象即拥有他自己的属性和方法,对象可以继承,在js中,函数对象有"prototype"属性,原型对象有constructor属性,
所有引用类型都有一个__proto__(隐式原型)属性,属性值是一个普通的对象

所有函数都有一个prototype(原型)属性,属性值是一个普通的对象
所有引用类型的__proto__属性指向它构造函数的prototype

构造函数与原型的关系

拿一幅图来表示一下

在这里插入图片描述
我们要在栈里面添加东西,那么就会在堆里面开辟相应的空间,构造函数可以创建对象,相当与母亲,它就有prototype(原型)属性,创建的原型相当于父亲,它有constructor属性指向构造函数,由此,我们创建的对象都可以继承他的父对象,而不能继承母亲,它可以使用父对象里面一切的方法跟属性,也可以自己创造属性跟方法,从而青出于蓝而胜于蓝,同理,儿子的儿子也具有这样的功能,链式结构就这样得来了。

     使用构造函数创建,new Object()
     var person = new Object();
     person.name = "briup";
     person.age = 22;

拥有的属性

constructor: //保存用户创建当前对象的函数
hasOwnProperty(propertyName); //检查给定的属性名是否是对象的自有属性,
toString(); //返回对象的字符串表示
valueOf(); //返回对象的字符串,数值,布尔值的表示。
propertyIsEnumerable(propertyName); //检查给定的属性在当前对象实例中是否存在
isPrototypeOf(object); //检查传入的对象是否是原型
toLocaleString(); //返回对象的字符串表示,该字符串与执行环

属性基本设置

访问对象属性
点表示法,右侧必须是以属性名称命名的简单标识符
person.name
中括号表示法
中括号中必须是一个计算结果为字符串的表达式,可以通过变量访问属性, 如果属性名中
含语法错误的字符,或者属性名使用的是关键字或保留字,可以使用中括号
person[“first name”]
l 删除属性
delete只是断开了属性和宿主对象的联系,而不会操作属性中的属性,并且 delete只会删除自有属
性,不能删除继承属性。在销毁对象时,为了防止内存泄露,遍历对象中的 属性,依次删除所有属
性。
语法:delete 属性访问表达式
例如:
delete stu.name //删除学生对象中的name属性
思想 for in
归根结底还是遍历思想。