本文会讲解什么是原型,什么是原型链,以及查找原型的方法,最后会实现一个函数:判断某对象是否有某属性。
定义
原型:函数都有prototype属性,称作原型/原型对象
- 原型可以放一些方法和属性,共享给实例对象使用
- 原型可以继承
原型链:对象都有_proto_属性,这个属性指向它的原型对象,原型对象也是对象,也有_proto_
属性,指向原型对象的原型对象,这样一层一层形成的链式结构称为原型链,最顶层找不到就返回null
查找原型
Object.getPrototyeOf()方法获取原型(标准方法)
const obj = {};
const prototype = Object.getPrototypeOf(obj);
console.log(prototype === Object.prototype); // true
实现判断对象是否有某属性的函数
该函数有两种使用,根据需求来看,是找对象自身有的属性,还是周对象及其原型链有的属性。
function hasProperty(obj, prop, checkPrototype = false) {if (checkPrototype) {//在原型链上找就用in运算符return prop in obj;}//在对象自身找就用hasOwnProperty()方法return obj.hasOwnProperty(prop);
}const myObj = {key: 'value'
};
console.log(hasProperty(myObj, 'key')); // true
// true,因为 toString 是 Object.prototype 上的属性
console.log(hasProperty(myObj, 'toString', true));
以上就是对原型的讲解,欢迎指正!