本文會講解什么是原型,什么是原型鏈,以及查找原型的方法,最后會實現一個函數:判斷某對象是否有某屬性。
定義
原型:函數都有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));
以上就是對原型的講解,歡迎指正!