创建与其他函数链接的函数对象
Creating a function object linked with other function?
我知道,
- 我们可以创建新的对象&使用链接给定对象作为其原型CCD_ 1
- 我们可以使用
new
关键字创建新对象对于任何函数,它创建一个与该函数的原型对象
但是,我在浏览器控制台中看到了一些功能,如HTMLBodyElement
、HTMLElement
、XMLHttpRequest
、
HTMLElement.__proto__ === Element
HTMLElement
是一个函数,它的原型是Element
,也是一个函数。我的问题是HTMLElement
是如何创建的,它的原型是如何与Object.create()
0功能联系在一起的。他们用来创建HTMLElement的语法是什么?
正如Felix Kling在他的评论中指出的,有问题的函数是由环境提供的。因此,如果不阅读浏览器JS引擎的sporce代码,或者幸运的话,不阅读它的文档,你就不会发现"HTMLElement
是如何创建的"。
但我想你的问题是如何自己创建这样的结构,这相当容易。以下是您可以使用的几种方法之一。
function Foo(){}
Foo.prototype = Element.prototype;
使用进行验证
(new Foo()) instanceof Element
例如,在您的控制台中,您将获得true
。不知怎么的,我宁愿称之为混音。
另一种方法是,保留Foo
作为构造函数:
Foo.prototype = new Bar();
其中Bar
是"父"类。这样做的优点是在构造函数中创建的函数和变量也可用于子类。注意,Element
不允许您直接构造新实例,因此我选择了不同的父实例。
如果你想添加更多的方法和字段,你可以在"链接"原型(你的话(后这样做:
Foo.prototype.foobar = "foobar";
Foo.prototype.getFoobar = function() {
return this.foobar;
}
或者在构造函数中执行此操作。
原型继承是一件有趣的事情,但可能很难理解。玩一玩。
更新
关于OP所谓的误解(见评论(,不要混淆prototype
和__proto__
。
一般来说,__proto__
存储对象的构造函数的prototype
。在这种情况下,这意味着(new Foo()).__proto__ === Foo.prototype
。__proto__
存储类的实例之间共享的方法和字段。
因此,Foo.__proto__ === Function.prototype === Empty
与类Foo
的实际实例的继承无关。
有关更多信息,请参阅以下两个问题:
- javascript中的-function Empty((是什么
- __proto__ VS JavaScript中的prototype
- 在javascript中调用函数/对象引用时,可容纳任何数据类型
- 访问函数对象的上下文属性|如何
- 为什么可以'我们在函数体中为函数对象添加属性,就像在javascript中为对象文字添加属性一样
- 如何将函数对象从javascript传递到Polymer元素
- 为什么函数对象的实例没有继承函数原型属性
- 为什么我会从 JavaScript 函数返回一个命名函数(对象)
- 为什么实例构造函数指向最上面的函数构造函数对象
- 使用object.freeze()扩展函数对象-can't添加字段
- 为什么'这'与函数对象一起使用时会有不同的处理方式
- setTimeout()/setInterval()赢得't执行**我正在传递函数对象,而不是执行函数
- 为什么茉莉花间谍不't通过引用解析函数对象
- 在 mongo map 中调用外部 javascript 函数(对象)或减少上下文的可能方法
- 在 JavaScript 中为函数对象添加别名
- 在 Express JS 中从路由调用函数对象
- 函数对象的名称属性是什么
- 构造函数对象
- 节点.js - 从另一个函数/对象发出事件
- 声明函数是否会创建具有函数名称和分配给它的函数对象的变量
- 函数对象__proto__和原型属性
- 类仿真 - 模块模式与函数对象