问题标签 [object-create]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 使用 Object.create 创建的 Javascript 数组 - 不是真正的数组?
它看起来像用 Object.create 创建的数组像数组一样行走,像数组一样嘎嘎,但仍然不是真正的数组。至少使用 v8 / node.js。
一些 Javascript 大师可以解释为什么会这样,以及如何使我新创建的数组与真实数组无法区分吗?
我的目标是克隆数据结构,包括可能附加了自定义属性的数组。当然,我可以使用 手动将属性附加到新创建的数组Object.defineProperty
,但是有没有办法使用Object.create
?
javascript - 带有 Object.create 和命名构造函数的原型 OO
我是从 Python 和 Smalltalk 的背景开始接触 Javascript 的,我很欣赏 Self 和 Lisp 在语言中的传承。使用 ECMAScript5,我想在没有 new 运算符的情况下尝试原型 OO。
约束:
- 用于创建类的可选 new 运算符
- instanceof 的原型链必须正确
- 用于 WebInspector 调试支持的命名构造函数
- alloc().init() 创建序列,如 Objective-C 和 Python
这是我为满足标准而进行的实施尝试:
它似乎在一个简单的模型中工作:
使用类作为工厂函数:
或使用 new 运算符:
我是否在我的实现中忽略了原型 OO 所需的功能?是否有我应该更改的 Javascript 约定或交互?总之,这里的“陷阱”是什么,有什么明显的改进吗?
我想成为具有构造函数定义的 DRYer,但我发现函数的 name 属性不可写,这就是支持 WebKit Inspector 的对象名称的原因。我能够构建一个 eval 来完成我想要的,但是......糟糕。
javascript - Javascript object.create 和 isPrototypeOf
我试图了解 object.create 以及如何最好地使用它,避免使用构造函数new
关键字。到目前为止,我正在按上述方式接近它(尽管可能不是最好的方法,只是反复试验) - 并且发现如果我使用object.create
我不再能够检查instanceof
和对象类型。
有人建议使用 isPrototypeOf 来检查 - 我做错了,因为我上面的代码false
在检查时返回。
有人会好心解释我哪里出错了吗?我对 javascript 中的原型继承仍然很陌生。
javascript - 访问使用 Object.create 创建的 JavaScript 属性的 get/set 方法
我想要的是能够包装一个 JavaScript 属性来修改 get/set 上的行为。
对于作为值的属性,我可以执行以下操作:
但是,如果myProperty已经有一个 getter/setter 怎么办?
有没有办法检测myProperty匿名设置器,以便我可以在notifyOfChange中调用它?
注意:我想让 notifyOfChange 与任何对象一起工作,因此仅对myProperty设置器使用命名函数是行不通的。
javascript - Javascript 私有变量 + Object.create(引用闭包变量)
我想知道如何通过 clojure 在 javascript 中创建私有变量。但是在使用Object.create时仍然会克隆它们。
我从http://ejohn.org/blog/ecmascript-5-objects-and-properties/获得了这种技术,但它有这个限制,即所有对象的闭包变量都是相同的。我知道 javascript 上的这种行为是应该的,但我怎样才能创建真正的私有变量?
javascript - 了解 Crockford 的 Object.create shim
我一直在阅读 Crockford 垫片以防止覆盖原型,并了解它有时不是最终/全部解决方案。我也明白ES5 Shim可能是一个可行的替代方案。我还阅读了这篇文章,它提供了更强大、更安全的替代方案。
尽管如此,我还是想知道他的Object.create
垫片在“说”什么,然后“在做什么”。有人可以告诉我我的解释评论是否正确吗?
这样,当我们将东西扩充到“another_stooge”时,“stooge”对象的原型就不会被覆盖。无需使用 'constructor' 重置 'stooge' 原型。
提前致谢,
-k
javascript - 为什么 Object.create 使我的私有变量变为静态?
代码可在此处使用 - http://jsfiddle.net/dsjbirch/zgweW/14/
这基本上是对私有变量的 crockfords 解释的直接复制和粘贴。
我已经添加Object.create()
了一些跟踪。
为什么第二个对象共享第一个对象的私有成员?如何避免这种情况但继续使用Object.create()
http://jsfiddle.net/dsjbirch/zgweW/14/
我希望看到
但实际上第二个对象的输出都是空的。
我的结论second
是因此共享first
对象的secret
成员。
javascript - Object.create 原型链
最初的问题
昨天我读到了 ECMAScript 5 Object.create() 我想用这个方法开始在我的代码中构建原型链,而不是设置原型及其构造函数,我喜欢你可以直接设置可写可配置等。
我试过这样
- 中给出的方法是否
Human
仅在 ram 中存在一次?并Human1.walk()
指向它? - 我想知道这是否是这样做的正确方法?我对 JavaScript 比较陌生。
这是jsfiddle上的代码。
回答
首先,这让事情变得更加清晰 =) 但是,1:当我这样做时,实例从其构造函数的原型继承(?)
2:所以 instanceof 运算符不会在此代码中中断,(它仅适用于函数对我来说似乎很清楚)
但是这样写,Paul 仍然从 Top 的原型继承了 inherit() 方法,我需要覆盖它但是如果我不希望 Human 的实例继承该方法,我该怎么做呢?
除了使用 Objkect.defineproperty (?) 之外,我无法设置像 wrtable 这样的属性描述符
那么使用 Object.create() 从 Objects 继承与设置原型和构造函数的主要好处是什么?=)
3:哦,谢谢,是的,这是正确的,这不是基础对象的扩展=)谢谢建议=)
感谢所有的努力 =)
回答
好的,所以当我这样做时
没有={}
base.prototype = 没有;
这不会阻止原型链向上直到 Object.prototype 吗?如果没有,有没有办法做到这一点?=) 会 ( Object.create(null); ) 这样做,
我认为我必须设置
base.prototype.constructor = base;
因为否则,原型的构造函数
var Top = new base();
如果原型设置为 Nothing ->
Top instanceof base // false
更新
我现在以这样的方式结束了它:
只是如果有人关心
但是,jsfiddle 不会运行它,Titanium 会按预期执行所有操作,也许是某种严格模式(??)
javascript - JavaScript 继承 Object.create
好的,我正在尝试跟踪对 Web 应用程序上的巨大表单所做的任何更改。加载页面时,我创建一个 JS 对象,它“捕获”所有输入字段(选择、单选按钮、复选框等)的初始状态。
当用户改变数百个输入元素中的任何一个的值时,新值将在第二个对象中进行跟踪。当用户点击Update
时,这两个对象会进行比较,并且只发送那些已更改的值,以相应地更新数据。
我认为使用继承是明智的,而不是构建 2 个完全独立的对象:
随着事情的发展,tracker
对象可能最终看起来像这样:
在 FF 和 chrome 中调用JSON.stringify
这个对象时,一切都很好:只返回对象自己的属性。在 IE 中不是这样:跟踪器没有prototype
属性,所以看起来会Object.create
创建副本而不是继承链?tracker.__proto__ === initialState
返回 true,而tracker.prototype === initialState
计算结果为 false,实际上该tracker.prototype
属性是未定义的。
问题1:是否有另一种方法可以在 IE 中设置继承链,让我剥离未更改的原型值?
问题2:我还想要一种方法——如果可能的话——建立一个允许嵌套对象的继承链。就像现在一样,嵌套对象是通过使用递归函数迭代主对象来处理的。有点傻,因为那是我想省略的。
简而言之:
我想知道这是否存在:
与往常一样:没有 jQuery 标签,意味着没有 jQuery
注意:我所说的 IE 是指怪物 IE8,而不是 IE9(可悲的是公司政策)
javascript - javascript中的Object.create方法
作为 javascript 的初学者,我试图从这里理解 Object.create() 方法
https://developer-new.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create
在示例代码中,第 18 行。创建了一个访问器属性,并将 writable 设置为 true。我还读到可写仅适用于数据描述符。
试过跑步,
我明白了invalid property error
。