- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图弄清楚我可以在多大程度上使用 javascript 语言本身,以及在涉及对象反射时我需要自己实现多少。这是预期的结果
// property inheritance schema (defining default props) (stored in db "schemas" table)
foo
bar
moo
baz
ugh
// method inheritance schema (stored in code)
foo
bar
moo
baz
ugh
// myTree structure + property overrides (stored in db "structs" table)
myBar
myBaz
myUgh
myBar
myBaz
myMoo
Tree 对象的实例将从 myBar 结构构造而成。在构建每个节点时,它将使用代码中的方法以及 myBar 结构本身中定义的节点的“继承”属性模式和任何非默认属性来组合方法。
目标是创建一个系统,给定 Tree 实例中的节点,可以 self 分析其自己的属性继承路径并识别属性在哪个级别定义。
这是为了允许编辑 myBar 结构,并指示哪些属性从基本架构(以及在哪个级别)继承为默认值,以及哪些属性在 myBar 结构中显式定义。
问题是,使用 JS 递归分析 .constructor 和 .prototype 属性可以确定多少,以及需要自定义实现多少?
我不确定这是否足够清楚,因此请要求澄清。
谢谢!
最佳答案
您想要构建原型(prototype)链。
假设您的继承链是
foo -> bar -> moo。
然后你就有了一个对象Foo
,它是 foo 节点的原型(prototype)。
您只需将 Foo
注入(inject)其原型(prototype)链即可创建 Bar
对象。
var Bar = Object.create(Foo, props)
现在我们有一个 Bar
原型(prototype),它是条形节点的原型(prototype)。
然后你对Moo
做同样的事情
var Moo = Object.create(Bar, props)
现在假设您有一个 moo 节点。
然后你就可以简单地拿走任何你知道的属性(property)。我们将其称为“prop1”并编写一个简单的函数,该函数为您提供属性所属的对象
var findPropertyOwner = function(obj, prop) {
do {
if (obj.hasOwnProperty(prop)) {
return obj;
}
} while (obj = Object.getPrototypeOf(obj));
}
现在您可能面临的问题之一是原型(prototype)链中的 obj 没有元数据告诉您该对象是什么,因此您可能需要向所有对象添加属性 "name"
您的节点原型(prototype)对象,以便您可以更轻松地检查它是什么。
您可能还想让 findPropertyOwner
返回一个 (obj, count)
元组,如下所示
var findPropertyOwner = function(obj, prop) {
var i = 0;
do {
if (obj.hasOwnProperty(prop)) {
return [obj, i];
}
} while (i++, obj = Object.getPrototypeOf(obj));
}
通过这种方式,您可以获得更多信息,例如在原型(prototype)链上找到该属性的位置。另请注意,当 do/while 循环终止时 (Object.getPrototypeOf(Object.prototype) === null
) 它将返回 undefined
关于javascript继承、反射和原型(prototype)链行走?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7706210/
我正在尝试让 Sprite 在 Canvas 上走过背景图像。理想情况下,我会在一张 Canvas 上完成这一切,但使用两张 Canvas 似乎更高效、更容易。 到目前为止我所拥有的: Fiddle
哦,嗨。我是一名初级 Java 开发人员,在空闲时间从事一些基于 2D 图 block 的游戏。现在我正在尝试实现游戏模型中非常基本的东西 - 各种类型的对象如何彼此交互。我希望有一天添加网络支持,所
我们如何使用 CoreMotion 数据检测用户正在驾驶/步行/运行/静止。我们可以使用 CMMotionActivityManager 获取 iPhone 5s 中的用户事件。但是如何进入低版本设备
我是一名优秀的程序员,十分优秀!