三、原型方法

三、原型方法

ES5为原型拓展了几个方法

3.1 isPrototypeOf

  • 原型对象的方法

  • 用于判断原型对象是否是参数对象的原型

  • 参数就是实例化对象

  • 在查找的时候,会查找整个原型链

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<div></div>
<div></div>
<div></div>
<script>
// 获取所有div
var obj = document.getElementsByTagName("div");
// 定义数组
var arr = [];

// 数组的原型是哪个对象的原型呢?
console.log(Array.prototype.isPrototypeOf(obj)); // false
console.log(Array.prototype.isPrototypeOf(arr)); // true
// 在查找原型的时候,会查找整个原型链
console.log(Object.prototype.isPrototypeOf(obj)); // true 展开原型链可以找到 Object
console.log(Object.prototype.isPrototypeOf(arr)); // true 展开原型链可以找到 Object

U3Ndcq.png

3.2 getPrototypeOf

  • 是对象的静态方法

  • 用于获取原型对象

  • 在ES5之前,获取原型对象的方式: proto来获取原型对象,以__开头,在ES5中不推荐使用,所以提供了getPrototypeOf方法

1
2
3
4
5
6
7
8
9
10
// 获取所有div
var obj = document.getElementsByTagName("div");
// 定义数组
var arr = [];

// 获取arr的原型对象
console.log(arr.__proto__);
// ES5
console.log(Object.getPrototypeOf(arr));
console.log(arr.__proto__ === Object.getPrototypeOf(arr)); // true

U3NBuV.png

3.3 setPrototypeOf

作用:

设置某一对象的原型对象(可以是一个对象,也可以是null)

使用方式:

1
2
3
4
Object.setPrototypeOf(obj, prototype);
obj:将被设置原型的对象
prototype:新的原型对象(可以是一个对象,也可以是null)
会修改整个原型链

新的原型对象为null

1
2
3
4
// 设置arr新的原型对象
// 会修改整个原型链
Object.setPrototypeOf(arr, null);
console.log(Object.getPrototypeOf(arr)); // 输出 null Array中的方法就无法使用了

U3NyEF.png

新的原型对象是一个对像:

1
2
Object.setPrototypeOf(arr, {"name": "laowang"});
console.log(Object.getPrototypeOf(arr)); // {name: "laowang"} 成为了 Object

U3Nc4J.png

点击查看

本文标题:三、原型方法

文章作者:Mango

发布时间:2020年07月14日 - 13:00:00

最后更新:2020年07月14日 - 13:27:10

原始链接:https://mango185.github.io/post/3bc84ee7.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------------本文结束 感谢您的阅读-------------------