Javascript方法调度过程
Javascript Method Dispatch Process
有人能解释一下当调用一个方法来选择运行哪个函数时JavaScript所经历的过程吗?我能在网上找到的大多数资源都解释了如何使用JavaScript对象实现特定行为,但没有解释方法调度在JavaScript中如何工作的一般原理。
当你写:
obj.prop
JavaScript引擎查看CCD_ 1对象以查看其是否具有名称为CCD_。如果是,则使用该属性的值。如果没有,引擎将查找obj
的原型对象,以查看it是否具有该名称的属性。如果是,则使用它的值。如果不是,则查看对象的原型。冲洗,重复,直到用完原型对象。
在某些允许方法重载的语言中,没有任何类型的"方法签名"匹配。JavaScript没有方法重载。具有给定名称的对象只能有一个属性。
让我们看一个例子:
function Thing() {
}
Thing.prototype.test = function() {
return "Thing#test";
};
var t = new Thing();
t.own = function() {
return "My own";
};
现在让我们玩t
:
console.log(t.own()); // Logs "My own"
对于表达式t.own
,引擎查看t
以查看它是否具有名为"own"
的属性。确实如此,因此使用该属性(函数)的值。之后的()
调用该函数,该函数返回"My own"
,我们就完成了。
console.log(t.test()); // Logs "Thing#test"
对于表达式obj
0,引擎查看t
以查看它是否具有名为"test"
的属性。事实并非如此,所以引擎会查看t
的原型。t
的原型是Thing.prototype
,它是在表达new Thing
时分配给它的。Thing.prototype
具有"test"
属性,因此使用该属性(函数)的值。然后()
在调用该函数后返回字符串"prop"
0。
console.log(t.toString()); // Logs "[object Object]"
引擎查看t
,没有找到"toString"
属性,所以它查看t
的原型,没有发现"toString"
属性,所以查看t
的原型的原型(即Object.prototype
)。确实具有"toString"
属性,该属性的值是一个函数。然后()
调用该函数,该函数返回"[object Object]"
。
最后,为了完整性:
console.log(t.foo()); // Throws an error
引擎在t
、t
的原型或t
的原型上找不到"foo"
。现在它已经没有原型了,所以表达式t.foo
产生了undefined
。然后我们尝试通过()
调用它,但我们不能这样做,因为undefined
不是一个函数。
- 为effect Composer创建GodRays效果过程
- 调度没有'无法立即更新组件
- 在dhtmlx调度程序中多次触发OnEventSave
- 为什么使用AWS Signature v4对S3的REST调用并没有真正使用签名过程
- 侦听HTML呈现过程事件
- Redux-正确调度操作
- 如果在对象上触发了dispatchEvent,我如何才能找到如何侦听它以及在哪里调度事件
- 如何在解析服务器上用kue调度作业
- 应用程序开发过程
- 在提交过程中使用同步确认灯箱提交表格
- 在电子商务结账过程中显示特定于上下文的错误
- casperjs-css选择器存在,但当单击它时会引发“”;CasperError:无法在不存在的选择器“”上调度mou
- Grunt排除在生成过程中插入某些文件
- JavaScript:如何在迭代过程中修改数组中的值
- Worklight Client使用自定义BODY参数调用过程
- 在生产中使用类似Grunt的构建过程
- 查找与锁定和更新调度相关的一个或两个节点模块
- 在调度过程中调试调度
- Javascript方法调度过程
- 如何避免在调度过程中调度