javascript中什么是“自己的”属性

2023-11-21

这里我有一个使用 getter 和 setter 来定义和获取属性值的代码。我使用对象构造函数创建了一个对象。我在 for...in 循环中传递了该对象。还在该对象上使用了 getOwnPropertyNames() 方法。这是结果

“fullName”属性可在 for...in 循环中访问

“fullName”在 getOwnPropertyNames() 方法中不可见。这意味着它是

不是自己的财产

这里我有两个基本问题。什么是自有财产?如果“fullName”不是自己的财产那么它是什么类型的财产?

function Name(first, last) {
    this.first = first;
    this.last = last;
}

Name.prototype = {
    get fullName() {
        return this.first + " " + this.last;
    },

    set fullName(name) {
        var names = name.split(" ");
        this.first = names[0];
        this.last = names[1];
    }
};
var obj=new Name('al','zami');
for(var i in obj){
   console.log(i); // fullName is here
}
console.log(Object.getOwnPropertyNames(obj)); // fullName is not here

hasOwnProperty and getOwnPropertyNames参考分配的属性directly到对象,而不仅仅是通过对象的原型链进行访问。任何一个this.foo = or bar.foo =算作自己的属性,因为您要分配给实例。

“自己的财产”的定义是第 4.3.30 节规格为:

其对象直接包含的属性

与定义的“继承财产”(4.3.31) as:

对象的属性不是自己的属性,而是该对象原型的属性(自己的或继承的)

也就是说,“自己的”属性位于实例上,而不是原型上。

最大的影响是原型类(具有某些方法和/或静态属性的构造函数)。用经典的面向对象术语来说,getOwnPropertyNames将跳过类方法和任何有static关键词。

如果你看一下第8.12.1节规范中,它间接排除了原型。在步骤 #3 中,运行时检查对象自身的属性以获取适当的属性名称。然而,在第8.12.2节(指getProperty没有“own”限定符),步骤 #3-4 描述了如果在对象本身上没有找到该属性,则检查对象的原型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript中什么是“自己的”属性 的相关文章

随机推荐

  • 防止列表视图丢失所选项目

    我目前正在 winform c 中的列表视图上工作 每次我点击列表视图上的空白区域时 所选项目丢失 列表视图控件有一个HideSelection默认为的属性True 做了False就可以开始了 在某些情况下这就足够了
  • 将class文件转换为dex文件

    android中如何将class文件转换为dex文件 有什么办法吗 使用 dex 选项调用 dx 命令 如下所示 dx dex output
  • 将新的 subversion 远程添加到现有的 Git 存储库中

    我有一个完全跟踪远程 SVN 存储库的 git 存储库 现在我需要添加一个新分支 该分支将跟踪完全不同的 SVN 存储库中的目录 那可能吗 It is git svn init只编辑默认的 svn 远程 你必须编辑配置文件 Look in
  • 如何在android中保存(切换)按钮状态?

    我在我的 andorid 应用程序中使用 SWITCH 如 android 切换按钮 而不是普通按钮 该代码在启用和禁用开关时工作正常 但我想存储开关的状态 假设我启用开关并关闭我的应用程序 后台代码将正常运行 但开关状态将更改为禁用 每次
  • iOS 开发:如何缩短代码中的 URL?

    我正在构建一个 iPhone 应用程序 我希望包含允许用户登录 Twitter 并在 Twitter 上发布指向我的应用程序的链接的功能 然而 为了做到这一点 该推文需要缩短我在 App Store 上的应用程序的 URL 如何编写代码来缩
  • 跟踪目录产品展示次数 - 增强型电子商务 Google Analytics

    我正在尝试使用以下方法在电子商务目录页面上实现产品印象谷歌分析增强电子商务追踪 按照规范 应该像这样实现它 ga create UA XXXXX Y ga require ec ga ec addImpression id P12345 P
  • 通过 SOCKS5 代理连接到 .NET Web 服务

    我正在尝试通过 SOCKS5 代理连接到 Web 服务 目前 我的app config如下
  • 如何在 Firefox 中让

    在这里 这个问题已经针对 IE 和 Chrome 得到了解答 但所提出的解决方案似乎不适用于 Firefox 16 45 以及可能之间的所有版本 基本上 建议的解决方案如下 table th td border 1px solid blac
  • 使用用户脚本捕获页面 xmlhttp 请求

    我有一个用户脚本 适用于 chrome 和 FF 它向页面添加了重要的功能 但最近被破坏了 因为开发人员向页面添加了一些 AJAX 我想修改脚本来监听页面 xmlhttp 请求 以便我可以根据 JSON 格式动态更新我添加的内容respon
  • 3D CSS 变换,Firefox 中的锯齿状边缘

    如同 css 变换 chrome 中的锯齿状边缘 同样的情况也发生在 Firefox 的 3D 变换上 例如 http jsfiddle net 78d8K 5 Firefox 这次 backface visibility没有帮助 任何想法
  • Python 中的迭代器节省内存吗?

    我不太明白Python中迭代器是如何拥有内存的 gt gt gt l1 1 2 3 4 5 6 gt gt gt l2 2 3 4 5 6 7 gt gt gt iz izip l1 l2 我们仍然需要O min l1 l2 内存 因为我们
  • 如何检查Kafka Consumer是否准备好

    我将 Kafka 提交策略设置为最新 但缺少前几条消息 如果我在开始向输入主题发送消息之前休息 20 秒 那么一切都会按预期进行 我不确定问题是否在于消费者花费很长时间进行分区重新平衡 有没有办法在开始轮询之前知道消费者是否准备好 您可以使
  • 在 WPF 中运行 Flash

    我正在尝试运行一个 swf在我的 WPF 应用程序中的文件中 我创建了一个html页面 其中我引用了我的 swf文件使用object标签 然后加载它html我的页面Main Window 我的 xaml 看起来像
  • 如何防止用户使用检查元素来启用禁用的元素?

    我有一个按钮如下
  • 如何将附加内容保存到我的 UIManagedDocument 文件包中?

    我在破译方面遇到了很多困难Apple 的文档UIManagedDocument 具体有以下方法 id additionalContentForURL NSURL absoluteURL error NSError error BOOL re
  • 防止XSS攻击,仍然使用Html.Raw

    我有 CMS 系统 我使用 CK 编辑器输入数据 现在如果用户输入然后 CKEditor 完成了公平的工作并正确编码并通过 lt script gt alert 39 This is a bad script data 39 lt scri
  • 检测到无效的映射模式:/**/swagger-ui/**

    我正在使用 springdoc openapi ui 作为 Spring Boot API 文档并面临以下问题 我已添加所有必要的配置 如下 Maven 依赖
  • Angular 5 - 使用管道清理 HTML

    当我收到警告时 警告 清理 HTML 会删除一些内容 我做了一些研究 看到人们使用下面的管道或类似于下面的管道 import Pipe PipeTransform from angular core import DomSanitizer
  • 将 VS2015 更新到 Update 1 后,变更集注释策略中出现内部错误

    大约一个小时前 一切都很好 当我尝试签入某些东西时 政策友好提醒我 为签入提供评论 然后我安装了 VS2015 Update 1 就像我的一些同事所做的那样 之后 我在尝试签入某些内容时收到以下错误消息 变更集评论政策中存在内部错误 加载变
  • javascript中什么是“自己的”属性

    这里我有一个使用 getter 和 setter 来定义和获取属性值的代码 我使用对象构造函数创建了一个对象 我在 for in 循环中传递了该对象 还在该对象上使用了 getOwnPropertyNames 方法 这是结果 fullNam