【JS】关于原型/原型链

本文会讲解什么是原型,什么是原型链,以及查找原型的方法,最后会实现一个函数:判断某对象是否有某属性。

定义

原型:函数都有prototype属性,称作原型/原型对象

  • 原型可以放一些方法和属性,共享给实例对象使用
  • 原型可以继承

原型链:对象都有_proto_属性,这个属性指向它的原型对象,原型对象也是对象,也有_proto_属性,指向原型对象的原型对象,这样一层一层形成的链式结构称为原型链,最顶层找不到就返回null

查找原型

Object.getPrototyeOf()方法获取原型(标准方法)

javascript 复制代码
const obj = {};
const prototype = Object.getPrototypeOf(obj);
console.log(prototype === Object.prototype); // true

实现判断对象是否有某属性的函数

该函数有两种使用,根据需求来看,是找对象自身有的属性,还是周对象及其原型链有的属性。

javascript 复制代码
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)); 

以上就是对原型的讲解,欢迎指正!

相关推荐
choumin2 天前
创建型模式——原型模式
c++·设计模式·原型模式·创建型模式
我登哥MVP15 天前
走进 Gang of Four 设计模式:访问者模式
java·设计模式·访问者模式·原型模式
学究天人16 天前
数学公理体系大全:第五章 序数与基数理论:超限算术与集合的大小
人工智能·线性代数·算法·机器学习·数学建模·原型模式
学究天人16 天前
数学公理体系大全:第六章 选择公理的等价形式及证明
人工智能·线性代数·算法·机器学习·数学建模·概率论·原型模式
学究天人17 天前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(补充卷9)
人工智能·线性代数·算法·数学建模·动态规划·原型模式·抽象代数
geovindu18 天前
CSharp: Prototype Pattern
开发语言·后端·设计模式·.net·原型模式·创建型模式
Seven凹凸Man18 天前
WorkBuddy之产品经理原型设计及PRD实战
ai·原型模式
ttod_qzstudio19 天前
【软考设计模式】原型模式:“克隆“对象与深拷贝、浅拷贝精讲
设计模式·原型模式
希冀12323 天前
【JavaScript】Javascript—JS进阶—Day03
开发语言·javascript·原型模式
想吃火锅10051 个月前
【前端手撕】instanceof
前端·javascript·原型模式