Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态getter和setters一种可能性

动态getter和setters一种可能性
EN

Stack Overflow用户
提问于 2012-12-12 22:08:43
回答 2查看 2.1K关注 0票数 6

我正在努力解决最近出现在我脑海中的一个问题。假设我们想要并且知道如何在javascript中使用动态的getter和setter,就像在php (__get,__set)中那样。但是由于javascript没有一个通用的属性,我们唯一能做的就是提供一个可能键的列表,然后迭代,只在这些键上添加getter和setter,并希望以后不会再有其他的。

但到目前为止,这个问题还没有得到解决。因此,我想到的下一种方法是对trycatch使用讨厌的技巧,所以任何时候在对象中没有定义名称时,使用catch作为getter (至少),然后恢复代码,这很难,而且可能是毫无意义的事情。但是从这里我的第二个问题来了,在这样的使用中:

代码语言:javascript
运行
AI代码解释
复制
console.log(g.someundefinedproperty); 

结果将是对console.log的调用,显示undefined,没有抛出任何异常。然后我想到:如果我使用原来的window.undefined getter和setter会怎么样呢,毕竟每次我搞砸了,拼错一个单词或什么东西时,都必须调用它。

所以我试着

代码语言:javascript
运行
AI代码解释
复制
Object.defineProperty(window, 'undefined', {
    get : function ()
    {
         // functional code, including getting the caller and figuring out
         // where we are, and what we have to do... easy :D

         console.log('works');
    },
    set : function ()
    {
         // some couple more fine hacks here
         console.log('this too');
    }
});

但不幸的是,window的undefined属性是configurable : false。除了undefined和内部window属性之外,其他黑客还尝试克隆window对象。并在新对象上定义新的undefined (请注意其中的讽刺意味),然后是window = mybetterwindow

由于这没有引起任何问题,我的希望很高,但系统再次让我失望,因为window不能被覆盖,这是设计的。我猜它有自己的getter,并且会根据window.prototype甚至更好的Window.prototype (注意大写字母)中的原型重新实例化自己。

作为我在这个实验中的最后一步,我在这个原型上重新定义了undefined。无济于事,什么也没改变...我尝试创建一个new Window(),但是Window不是一个构造函数,失败!

由于我已经没有想法了,我发现自己在这里写了这篇恳求帮助的文章。如果您有任何想法来解决动态的getters和setters问题,(the existencial problem of life, universe and everything else),以一种不会以任何方式修改...我使用对象的方式(作为奖励,它不会在fabric of time and space中使用hole )或语法,我恳求您发言,否则永远保持沉默:)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-12 22:32:06

,但不幸的是,window的未定义属性是configurable: false

只有在EcmaScript 5.1之后才会出现这种情况。以前,它是可重写的。

如果我使用原始的window.undefined getter和setter怎么办,毕竟每次我搞砸了,拼错一个单词或什么东西时,都必须调用它。

不,它不会起作用的。 value和全局变量"undefined“之间存在差异。不会在每次遇到未定义的值时计算变量(例如,在typeof (void 0)中),只有在显式使用它时(例如,在g.someprop === undefined中)。

有什么办法解决动态的getter和setters问题吗?

只有一个解决方案:Proxies。不幸的是,它只是一个和谐草案,目前只有supported in Firefox' Javascript 1.8.5

另请参阅实现轮询解决方案的Is there an equivalent of the __noSuchMethod__ feature for properties, or a way to implement it in JS?Detect when a new property is added to a Javascript object?How to detect when a property is added to a JavaScript object? (通过setInterval检查更改)。

对于干净的解决方案,您目前必须使用显式的getter函数,您可以传递属性名称(g.get("someundefinedproperty"))。

票数 5
EN

Stack Overflow用户

发布于 2012-12-12 22:33:05

您要完成的任务(任何未定义属性的全局getter )都超出了跨浏览器JavaScript的范围。

最接近的功能是使用__defineGetter__向所有对象添加特定属性:

代码语言:javascript
运行
AI代码解释
复制
var o = Object.prototype;
o.__defineGetter__("testo", function() { return "yo in testo"; });
alert({}.testo);
alert((new Date()).testo);

http://jsfiddle.net/NLCvs/2/

如果您可以提前预测可能未定义的属性的名称,这可能会很有用。即便如此,为一个可能未定义的属性的所有对象添加一个访问器也是相当老套和糟糕的形式。

一个更好的选择是在未定义的属性可能被访问时重构代码:

代码语言:javascript
运行
AI代码解释
复制
function getter(o, n) {
 return typeof o[n] == 'undefined' ? 'some default value' : o[n];
}
var obj = { hello: 'world' };
alert(getter(obj, 'hello'));
alert(getter(obj, 'an_undefined_property'));

更好的选择是使用mixin来设置您需要访问的任何默认属性,例如通过jQuery.extend

代码语言:javascript
运行
AI代码解释
复制
var defaults = {
 required: 'this property is required'
};
var my_object = {
 something_else: 'this is something else'
};
var o = jQuery.extend({}, defaults, my_object);

// o.required === 'this property is required'
// o.something_else === 'this is something else'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13849533

复制
相关文章
WordPress 如何获取分类/标签的ID
鼠标移动到编辑处,看到浏览器底部出现链接,其中的tag_ID=5中这个5就是分类的ID,标签同理。
可定
2020/04/20
6.1K0
WordPress 如何获取分类/标签的ID
WordPress 技巧:获取未打标签的文章
该功能已经整合到 WPJAM Basic 插件中,并已免费提供下载,简单勾选或者设置下即可开启!
Denis
2023/04/13
7680
WordPress 技巧:获取未打标签的文章
Reddit 如何实现大规模的帖子浏览计数
本文介绍了Reddit如何实现大规模浏览计数系统,该系统使用基于HyperLogLog的算法来估计用户的浏览量。首先介绍了HyperLogLog算法,然后描述了Reddit是如何利用Redis和Cassandra来实现这个系统的。
企鹅号小编
2018/01/08
1.3K0
Reddit 如何实现大规模的帖子浏览计数
如何使用 Redis 实现大规模的帖子浏览计数
满足上面四个条件,其实比想象中要复杂。为了在实时统计的情况下保持精准度,我们需要知道某一个用户之前是否浏览过一篇文章,所以我们需要为每一篇文章存储浏览过它的用户的集合,并且在每次新增浏览时检查该集合进行去重复操作。
芋道源码
2018/12/29
2.2K0
如何使用 Redis 实现大规模的帖子浏览计数
WordPress函数the_tags获取文章标签使用方法解析
  我们知道wordpress有一个the_tags函数可以获取到文章设置的所有标签,并按照你想要的形式输出。在文章页面输出标签有助于内链布局,提升SEO效果。在模板中显示标签名并链接到该标签中,如果当前页中无标签就不显示,这个函数必须使用在WordPress主循环中。就是能获取到全局变量post的地方,一般用于文章页与文章列表页。
ytkah
2019/12/26
1.5K0
WordPress分类和标签等页面获取最后文章更新时间
WordPress 分类目录和标签页面如果想要获取到目录及标签里面内容的最后更新时间,就是通过分类目录和标签下面最近发布的那边文章的发布或者修改时间,因为 WordPress 本身并没有提供相关的函数或者数据能够直接查询到更新时间,然而对于分类和标签,当然还包括作者页面,搜索页面等所有的聚合页面,都有可能需要获取到其最后的更新时间,那么今天子凡就来分享一个简单的办法。
张子凡
2023/01/09
7580
WordPress分类和标签等页面获取最后文章更新时间
如何给WordPress添加阅读计数
显示文章的阅读次数对 SEO 是有很大好处的,因为每次点击都会对文章进行一次小小的更新,我们可以用 WP-PostViews 这个插件来实现这个功能。
超超不会飞
2020/10/28
9480
如何给WordPress添加阅读计数
WordPress 技巧:动态修改 WordPress Heading 标签
在博客的首页或者其他列表页,一般来说 H1 标签是博客的标题,H2 是日志的标题,而到了日志的页面,则日志的标题应该是给予 H1 标签,这个无论从语义上说还是 SEO 上说都是最好的,那么日志的内容怎么给设置子标题的 heading 标签呢?
Denis
2023/04/15
7700
定制化 WordPress More 标签
More 标签是 WordPress 一个非常有用的特性。它允许你选择切断点,然后在首页上只显示这个点的以上的内容。
Denis
2023/04/13
4010
详析获取标签
在前几期的文章当中,我们学习了JS的基础语法,它是我们学习其它知识点的重要前提。小编也与大家分享了JS逻辑与DOM的相结合,并带着大家去实现了一些简单的页面交互效果,涉及了获取标签—>绑定事件—>操作标签样式。而今天的文章主要带着大家来分析其它获取标签的方法,这样才能更灵活的去获取网页中的标签。 本文内容概要: 1 回顾通过ID名获取标签的方法 2 获取标签的其它方法 3 课程小结 4 课后作业 1 回顾通过ID名获取标签的方法 ID名获取标签需要给标签起一个ID名,然后通过getElementById()
HTML5学堂
2018/03/13
2.2K0
详析获取标签
为wordpress添加Canonical标签
在 WordPress 2.9 之前,让 WordPress 博客支持 Canonical 标签是需要通过插件或者手工修改主题的 header.php 文件来实现。如在主题中加如下的代码:
ytkah
2022/03/14
5610
php获取百度贴吧指定帖子楼层数
最近看到了一个奖品很诱人的抢楼贴,于是萌生了做一个贴吧抢楼工具的想法。要达到抢楼的目的,第一步当然是获取当前帖子的楼层数,这样才能精准抢楼,在网上找了一圈,没找到相关代码,于是自己用PHP写了一个,试了一下效果还不错,因此果断分享出来! /******************************** 获取贴吧指定帖子回复量的函数 编  写:mengkun 函数名:getFCount 输  入:帖子的tid 输  出:帖子的楼层数(最大支持3784) ***********
夏时
2018/06/26
8040
使用 class .label 来显示标签用于计数
Bootstrap 标签。标签可用于计数、提示或页面上其他的标记显示。使用 class .label 来显示标签,如下面的实例所示:
好派笔记
2021/09/18
7370
WordPress获取文章地址
本站兄弟站:www.geekyuu.com 使用的主题为CorePress,但该主题模板存在一个BUG:在文章下面点击分享后获取到的是网站首页链接而不是文章链接,这就导致了分享到QQ空间后点进去访问的不是文章而是网站首页
MoyiTech
2023/02/27
1.5K0
WordPress获取文章地址
【Wordpress】获取作者信息的函数
Wordpress 中文文档 1、文章中->作者 显示文章的作者 : <?php the_author(); ?>  显示该文章的作者名称,该函数必须放在Loop中(文章的主循环中)。如果用在php中
redszhao
2021/08/09
1.5K0
【Wordpress】获取作者信息的函数
WordPress如何获取,分类的链接?
前些时在开发主题时遇到一个小问题,始终想不明白,就是如何在子分类中获取到父分类的链接。
Kit
2021/08/02
2K0
WordPress如何获取,分类的链接?
Canonical 标签以及在 WordPress 中的应用
Canonical 标签,中文叫做 URL 范式,是 Google,雅虎,微软等搜索引擎在2009年一起推出的一个标签(百度在2013年也终于支持),它主要用来解决由于 URL 形式不同而造成的重复内容的问题。
Denis
2023/04/15
1.1K0
点击加载更多

相似问题

获取标签帖子wordpress

12

按标签计数的wordpress字体帖子

17

Wordpress从标签获取帖子

124

Wordpress -按标签获取帖子

14

通过标签/ URL获取帖子所有帖子Wordpress

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档