首页 > 编程语言 >javascript 对象的显示属性和隐式属性

javascript 对象的显示属性和隐式属性

时间:2025-01-20 22:22:18浏览次数:1  
标签:javascript 对象 Object own 原型 隐式 属性

在 JavaScript 中,对象的属性可以分为“显示属性”(也称为自有属性,own properties)和“隐式属性”(通常指的是继承自原型链上的属性)。理解这两类属性的区别对于深入掌握 JavaScript 对象模型非常重要。

显示属性(Own Properties)

显示属性是指直接定义在一个对象上的属性。它们是该对象自身的一部分,并不通过原型链继承而来。可以通过以下方法来检测或获取一个对象的显示属性:

  • Object.hasOwn(obj, prop):这是一个较新的方法,用于检查对象是否具有指定的显示属性。它比 obj.hasOwnProperty(prop) 更加安全,因为它不会被原型链上的同名方法覆盖。

  • Object.getOwnPropertyNames(obj):返回一个数组,包含对象的所有可枚举和不可枚举的显示属性名称。

  • Object.keys(obj):返回一个数组,包含对象所有可枚举的显示属性名称。

  • Object.values(obj):返回一个数组,包含对象所有可枚举的显示属性值。

隐式属性(Inherited Properties)

隐式属性是指那些不是直接定义在对象上,而是通过原型链从其构造函数或其他对象继承来的属性。你可以通过以下方式与这些属性交互:

  • for...in 循环:遍历对象的所有可枚举属性,包括自身的和从原型链继承来的属性。

  • Object.getPrototypeOf(obj):获取对象的原型(即直接父对象),然后可以进一步检查原型上的属性。

  • instanceof 运算符:检查一个对象是否是某个构造函数的实例,间接反映了对象可能从其原型继承的属性。

示例代码

这里有一个简单的例子,演示了如何区分显示属性和隐式属性:

const parent = { inherited: 'I am from parent' };
const child = Object.create(parent); // 创建一个以 parent 为原型的新对象
child.own = 'I am an own property';

console.log(Object.hasOwn(child, 'own')); // true
console.log(Object.hasOwn(child, 'inherited')); // false

// 使用 for...in 可以访问到继承来的属性
for (let key in child) {
    console.log(key + ': ' + child[key]);
}
// 输出:
// own: I am an own property
// inherited: I am from parent

在这个例子中,ownchild 的显示属性,而 inherited 是通过原型链从 parent 继承来的隐式属性。

理解显示属性和隐式属性的概念有助于更好地控制对象的行为和特性,特别是在涉及原型链、属性枚举以及对象间的关系时。
我的理解是挂在this下的属性属于显示属性,挂在prototype下的也是显示属性,挂在原型链__proto__是隐式属性。

标签:javascript,对象,Object,own,原型,隐式,属性
From: https://www.cnblogs.com/jocongmin/p/18682589

相关文章

  • html img标签的loading属性可用于懒加载图片
    loading属性是HTML<img>标签的一个属性,用于指示浏览器何时加载图像资源。它有助于优化页面加载性能,特别是对于包含大量图片的页面。通过延迟加载(lazyloading)不在视口内的图片,可以显著减少初始页面加载时间,并提高用户体验。loading属性的值loading属性支持以下三个值:laz......
  • JavaScript学习(三)
    有事情的缘故导致中间几天没有进行学习。今天开始继续后端的学习,学习的第五天(2025.1.20)JavaScript 函数定义        JavaScript使用关键字 function 定义函数。        函数可以通过声明定义,也可以是一个表达式。        函数声明   ......
  • Vue全流程--Vue2计算属性与监视属性
    计算属性理论计算属性:1、定义:所需属性不存在,可以通过其他已有属性计算得出2、原理:以Object.defineproperty()方法提供的get和set函数3、get函数执行条件:被数据被读取时,或者所依赖数据发生改变时,get就会被调用。   set函数执行条件:数据被修改时,令返回值===修改值4......
  • 【转】[JavaScript] 解构赋值
    转自:kimi.ai解构赋值(DestructuringAssignment)是JavaScript中一种非常强大的语法特性,用于从数组或对象中快速提取数据并赋值给变量。它可以让代码更简洁、更易读。1.数组解构赋值数组解构赋值允许你从数组中按顺序提取值,并将它们赋值给变量。1.1基本用法JavaScript复制......
  • 举例说明css有哪些简写的属性和属性值?
    CSS(层叠样式表)中包含了大量的属性和属性值,用于定义HTML元素的样式。为了简化代码和提高效率,CSS提供了一些简写的属性和属性值。以下是一些常见的CSS简写属性和属性值的例子:1.颜色值缩写16进制颜色:CSS中常用的颜色表示方法是16进制,可以缩写为3位或6位。例如,#000000可以缩写为#0......
  • html的a标签属性rel="noopener"有什么作用?
    在HTML中,<a>标签的rel属性用于定义当前文档与被链接文档之间的关系。rel="noopener"是其中的一个值,它主要的作用是在打开新窗口或新标签页时,防止新页面通过window.opener属性访问到原页面的window对象。这可以提高网站的安全性,防止一些潜在的跨站脚本攻击(XSS)或反向Tabnabb......
  • JavaScript的那些不可不知的知识
    目录JavaScript基础JavaScript高级JavaScript基础数据类型:JavaScript的数据类型分为基本数据类型和引用数据类型。基本数据类型包含number(数字)、string(字符串)、boolean(布尔值)、null(空值)、undefined(未定义)。而像array(数组)、function(函数)等则属于引用数据类型。在内......
  • JavaScript详解十二 ——事件概述、操作元素
    1、事件概述JS使我们有能力创建动态页面,而事件是可以被JS侦测的行为简单理解:触发----响应机制网页中每个元素都可以产生某些可以触发JS的事件,例如点击事件事件是由三部分组成事件源事件类型事件处理程序称为事件三要素事件源:事件被触发的对象谁被触发事件类型:如何触......
  • JavaScript详解十三 ——节点操作
    节点操作1、创建节点docment.createElement('节点')参数:标签名字符串这些元素原先不存在,是根据需求动态生成的,所以也成为动态创建元素节点,会将创建好的对象作为返回值返回2、创建文本document.createTextNode()可以用来创建一个文本节点对象参数:文本内容字符串,并将新的......
  • 【转】[JavaScript] 为什么需要 ===
    转自:kimi.ai在JavaScript中,===是严格等于运算符(StrictEqualityOperator),它与==(等于运算符)一起用于比较两个值是否相等。然而,===和==的行为和用途有所不同,这主要是由于JavaScript的类型系统和历史设计导致的。以下是一些关键原因,解释为什么JavaScript中需要===:1.......