首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Vue.js对象代理: Object.keys中没有显示的道具

Vue.js对象代理: Object.keys中没有显示的道具
EN

Stack Overflow用户
提问于 2018-08-21 10:56:40
回答 1查看 2.8K关注 0票数 0

Vue.js代理其对象以捕获属性访问。我似乎在抽象中发现了一个漏洞:Object.keys不返回键列表中的道具。

具有以下Vue组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function callMe() {
  var comp = Vue.component("comp", {
    template: "<button @click='clickMe()'>xxx</button>",
    props: {
        label: String,
        cardId: String,
        collapsible: {
            type: Boolean,
            default: true,
        },
        collapsed: Boolean,
    },
    data() {
        console.log(Object.keys(this))
        console.log(this.collapsible)
        console.log(Object.keys(this).includes("collapsible"))
        return { isCollapsed: this.collapsed }
    },
    methods: {
       clickMe(){
         console.log(this)
       } 
    }

  })
  var vm = new Vue({
    el: '#root',
    template: "<comp></comp>",
  })
}
callMe();
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.11/dist/vue.js"></script>
<div id='root'>
 
 <button @click="clickMe()" >Click Me</button>

</div>

控制台输出是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(29) ["_uid", "_isVue", "$options", "_renderProxy", "_self", "$parent", "$root", "$children", "$refs", "_watcher", "_inactive", "_directInactive", "_isMounted", "_isDestroyed", "_isBeingDestroyed", "_events", "_hasHookEvent", "_vnode", "_staticTrees", "$vnode", "$slots", "$scopedSlots", "_c", "$createElement", "$attrs", "$listeners", "_watchers", "_props", "toggleThis"]
true
false

(有趣的是,当我稍后调用检查时,isCollapsed项在列表中。您还会注意到,clickMe方法也存在。似乎只有道具被遗漏了。

为什么会发生这种情况?

更普遍的情况是,Vue的代理对象如何发出一组不同于它随后可以访问的密钥?

这对我来说是个问题,因为我正在尝试使用pug-vdom进行一些奇妙的尝试,在内部使用Object.keys来枚举要注入到Pug模板中的变量。

这是Vue虫吗?或者,是否可以从this对象访问支持键列表,并导出其键也包含道具的对象?

编辑:添加了一个可运行的代码片段来演示这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-21 11:15:17

Object.keys()不对原型属性进行迭代。

子组件也是根组件中的inherited。这意味着道具&数据字段必须位于子组件的__proto__中。

因此,如果我们执行Object.keys(this__proto__).includes("collapsible"),它在子组件中返回true

如果要从子组件访问这些字段,请使用this.$propsthis.$data

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function callMe() {
  var comp = Vue.component("comp", {
    template: "<button @click='clickMe()'>xxx</button>",
    props: {
        label: String,
        cardId: String,
        collapsible: {
            type: Boolean,
            default: true,
        },
        collapsed: Boolean,
    },
    data() {
        console.log('Inside Child:',Object.keys(this))
        console.log(this.collapsible)
        console.log(Object.keys(this.__proto__).includes("collapsible"))
        console.log(Object.keys(this).includes("collapsible"))
        return { isCollapsed: this.collapsed }
    },
    methods: {
       clickMe(){
         console.log(this)
       } 
    }

  })
  var vm = new Vue({
    el: '#root',
    template: "<comp></comp>",
    props:{
    jack:{
          type: Boolean,
          default: true
         }
    },
    data(){
      console.log('Inside parent:', this.jack)
      return {}
    }
  })
}
callMe();
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.11/dist/vue.js"></script>
<div id='root'>
 
 <button @click="clickMe()" >Click Me</button>

</div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51955055

复制
相关文章
密码体制如何应对“量子霸权”?
量子计算是目前全世界范围内的前沿研究热点,并可能正以量子体积每年翻倍的“量子摩尔定律”向前发展。然而,由于量子计算机的强大运算能力,一旦“量子霸权”成为现实,现有密码体制可能发生颠覆性的崩塌。本文就量子计算对现有密码算法的影响进行了分析,并总结了抗量子计算攻击的公钥密码算法的发展现状。
FB客服
2019/12/26
2.6K0
密码体制如何应对“量子霸权”?
【密码学(1)】-“公钥密码体制”
公共密钥密码体制于 1976 年提出,其原理是加密密钥和解密密钥分离。密码体制的基本模型如图 所示。
帆说区块链
2022/04/27
1.6K0
【密码学(1)】-“公钥密码体制”
信息安全之公钥密码体制
设整数a,b,n(n ≠0),如果a-b是n的整数倍,则a≡b(mod n),即a同余于b模n。也可理解为a/n的余数等于b/n的余数。 (mod n)运算将所有的整数(无论小于n还是大于n),都映射到{0,1,…,n-1}组成的集合。 模算术的性质: (a mod n) + (b mod n) = (a+b) mod n (a mod n) - (b mod n) = (a-b) mod n (a mod n) * (b mod n) = (a*b) mod n
海拥
2021/08/23
5390
信息安全之公钥密码体制
Linux Token Auth 一次性密码认证
Linux Token Auth 一次性密码认证 摘要 服务器端脚本: https://github.com/oscm/devops/blob/master/bin/chpasswd.sh 手机应用: https://github.com/oscm/Token 我的系列文档 Netkiller Architect 手札 Netkiller Developer 手札 Netkiller PHP 手札 Netkiller Python 手札 Netkiller Testing 手札 Netk
netkiller old
2018/03/05
1.3K0
Linux Token Auth 一次性密码认证
tf.pad
pad一个张量。 这个操作根据指定的paddings填充一个tensor。padding是一个形状为[n, 2]的整数张量,其中n是张量的秩。对于输入的每个维度D,paddings[D, 0]表示在该维度tensor的内容之前要添加多少个值,paddings[D, 1]表示在该维度张量的内容之后要添加多少个值。如果mode是“REFLECT”,那么paddings[D, 0]和paddins[D, 1]必须不大于tensor.dim_size(D) - 1。如果mode是“SYMMETRIC”,那么paddings[D, 0]和paddings[D, 1]必须不大于tensor.dim_size(D)。
狼啸风云
2019/06/25
1.2K0
tf.pad
如何在Firefox 67中试用改进的密码管理器
虽然Mozilla正在努力改进Firefox浏览器中的内容拦截器,但下一个稳定版本还将包括现有工具的新功能和改进的性能,包括密码管理器的改进。
用户8705059
2021/06/08
1.1K0
Linux Token Auth 一次性密码认证
Linux Token Auth 一次性密码认证 http://netkiller.github.io/journal/token.html 目录 1. 什么是Token 2. 为什么使用令牌 3. 什么时候能用到令牌技术 4. 本文的Token应用在什么地方 5. 谁来部署 6. 手机端配置 6.1. 设置密码 6.2. 查看服务器密码 6.3. 设置刷新时间 1. 什么是Token Token(令牌)是一个身份认证标识,token还有一个特点,那就是存在过期时间的。也就是令牌不是长久有效的。 2. 为什
netkiller old
2018/03/05
1.8K0
pad block corrupted
Security.addProvider(new com.sun.crypto.provider.SunJCE()); Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());// 添加PKCS7Padding支持 Cipher cipher = Cipher.getInstance(“DESede/ECB/PKCS7Padding”, “BC”); Key key = CipherManager.getKey(sig.getBytes(“GBK”)); cipher.init(Cipher.DECRYPT_MODE, key); byte[] decBytes = cipher.doFinal(CipherManager.str2ByteArr(encStr));
Java架构师历程
2018/09/26
6.1K0
一次性密码本-绝对不会被破译的密码
一次性密码本即Vernam Cipher,是由Gilbert Vernam在1917年, 开发的一种加密算法。
子润先生
2021/06/21
8560
一次性密码本-绝对不会被破译的密码
一次性密码本即Vernam Cipher,是由Gilbert Vernam在1917年, 开发的一种加密算法。
程序那些事
2020/07/07
1.3K0
一次性验证密码(OTP)的简单绕过
今天分享的是作者在众测过程中实现的一次性验证密码(OTP)绕过技巧,通过拦截修改响应中的内容即可有效绕过OTP,姿势非常简单,但也值得学习借鉴,一起来看看。
FB客服
2020/06/03
5.3K0
为什么你需要改进训练数据,如何改进?
Andrej Karpathy 在他的 Train AI 演讲中展示了这张胶片,我非常喜欢。这张胶片完美地揭示了深度学习在研究与生产间的区别。通常来说,学术论文的主要精力是放在开发新的、先进的模型上面,在数据集方面一般都是从公开的数据集取一部分使用。而相反,那些我所知道的想用深度学习技术做实际应用的开发者们,他们绝大部分的精力都花在了担心他们的训练数据上面。
AI研习社
2018/07/26
7040
为什么你需要改进训练数据,如何改进?
PAD SET_pthread_join函数
ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。
全栈程序员站长
2022/09/30
3430
redis如何设置密码及验证密码_redis如何设置密码及验证密码
在百度云安装redis服务之后,一直给我发送系统安全警告,推荐我redis设置访问密码,于是出于安全考虑我就设置一下redis的密码
全栈程序员站长
2022/10/04
7.9K0
redis如何设置密码及验证密码_redis如何设置密码及验证密码
PHP array_pad() 函数
提示:如果您将 size 参数设置为负数,该函数会在原始数组之前插入新的元素(参见下面的实例)。
用户1448800
2021/08/19
2370
Padstart_notation pad pro
// 将一个ipv4地址转换为10进制数输出 // eg: 192.168.1.1
全栈程序员站长
2022/09/30
2270
Padstart_notation pad pro
如何改进梯度下降算法
基于梯度下降训练神经网络时,我们将冒网络落入局部极小值的风险,网络在误差平面上停止的位置并非整个平面的最低点。这是因为误差平面不是内凸的,平面可能包含众多不同于全局最小值的局部极小值。此外,尽管在训练数据上,网络可能到达全局最小值,并收敛于所需点,我们无法保证网络所学的概括性有多好。这意味着它们倾向于过拟合训练数据。
崔庆才
2019/09/04
1.2K0
如何改进梯度下降算法
[信息安全] 4.一次性密码 && 身份认证三要素
在信息安全领域,一般把Cryptography称为密码,而把Password称为口令。日常用户的认知中,以及我们开发人员沟通过程中,绝大多数被称作密码的东西其实都是Password(口令),而不是真正意义上的密码。本文保持这种语义,采用密码来代指Password,而当密码和口令同时出现时,用英文表示以示区分。 0. OTP一次性密码 OTP是One Time Password的简写,即一次性密码。在平时生活中,我们接触一次性密码的场景非常多,比如在登录账号、找回密码,更改密码和转账操作等等这些场景,其
blackheart
2018/01/19
2.1K0
[信息安全] 4.一次性密码 && 身份认证三要素
用 PAD 创造无限可能
#首届 Microsoft Power Automate 黑客松##Power Automate 线上训练营##Power Automate#
airmelt
2022/12/02
6660
点击加载更多

相似问题

如何识别rails中的无效日期?

23

Postgres无效的日期格式

116

如何在Postgres表的字段上设置默认日期?

23

识别postgresql中的无效日期

20

postgres中输入的日期和整数无效

135
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文