尝试在node.js上模拟function.bind()

I_Debug_Everything

我正在使用节点v0.10.28

我一直试图将函数bind()方法模拟为函数的原型,但遇到了一个奇怪的问题。

Function.prototype.bind = function() {
    var obj = arguments[0],
        argumentsArray = [],
        self = this;

    // since arguments is an object and we can't call .splice() on it
    for(var i in arguments) {
        argumentsArray.push(arguments[i]);
    }

    argumentsArray.splice(0,1);

    // The following throws error when running via node, works fine on browser
    //console.log(argumentsArray); 

    return function() {
        return self.apply(obj,argumentsArray);
    }
};


function sum(y,z) {
    return this.x + y + z; 
}

var obj = { x : 8},
    f, value;

f = sum.bind(obj,1,2);

value = f();

console.log(value);

请参阅此小提琴,当我通过node(node demo.js运行时,它具有一些奇怪的行为。参见console.log(argumentsArray)小提琴中的注释,取消注释,将其保存在文件中并通过node运行将给您以下错误:

TypeError: Object #<Object> has no method 'log'

console.log(value)通过节点运行final时,final也不会在控制台上显示任何内容。似乎在浏览器上也可以正常工作。

我缺少什么,还是节点不允许console.log()在原型函数定义之内或其他?

我在这里先向您的帮助表示感谢。

爆炸物

这是因为console模块将其所有方法绑定到自身(请参见此处的源代码)。这是为您可以做的事情:

var log = console.log;

log('something');

console模块将在首次使用时初始化。所以在线

// The following throws error when running via node, works fine on browser
console.log(argumentsArray); 

node将尝试初始化console模块,然后调用log方法。在模块初始化过程中,它将尝试在此处log方法绑定到自身,结果-将再次调用您的方法模块将被视为已初始化,并且节点将尝试调用其方法。但是实际上当时还没有初始化。因此将引发错误。bindconsolelogconsole

PS

对您要执行的操作的简单得多的实现:

Function.prototype.bind = function(context) {
    var args = [].slice.call(arguments, 1);
    var self = this;

    return function() {
         return self.apply(context, args.concat([].slice.call(arguments)));
    };
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

了解尝试并捕获node.js

来自分类Dev

了解尝试并捕获node.js

来自分类Dev

在 node.js 中尝试捕获设置

来自分类Dev

在C中模拟std :: bind

来自分类Dev

尝试在Node-JS / Express中代理图像

来自分类Dev

尝试在Node.js中加载所有Firestore文档

来自分类Dev

尝试访问Google Spreadsheets时使用Node.js

来自分类Dev

Node.js Puppeteer UnhandledPromiseRejection警告尝试导航Google Maps

来自分类Dev

尝试从Node.js获取信息SOAP时出错

来自分类Dev

尝试使用node.js挂起系统返回集合

来自分类Dev

尝试在 Node.js mssql 中的查询中传递参数

来自分类Dev

Node JS - 尝试创建 PDF 时出现标题错误

来自分类Dev

尝试用std :: bind重新分配std :: function并得到错误“试图引用已删除的函数”

来自分类Dev

在node.js中使用Shell脚本尝试尝试同步行为

来自分类Dev

使用React.js虚拟DOM在Node.js上模拟画布

来自分类Dev

function(){}。bind(this)和angular.bind(this,function(){})之间的区别

来自分类Dev

Bind callback function with multiple arguments

来自分类Dev

何时在JS中使用.bind()

来自分类Dev

为什么要应用Function.prototype.bind.bind?

来自分类Dev

在Node.js和浏览器上拦截(模拟)http请求

来自分类Dev

需要在模拟器上使用 node.js 创建自适应卡的示例代码

来自分类Dev

尝试使用Node.js访问AWS EC2上的端口3000时出现ERR_SSL_PROTOCOL

来自分类Dev

Express.js node.js 语法错误尝试 .update() mongoDB

来自分类Dev

什么是PDO上的bind_result

来自分类Dev

AngularJS在元素上嵌套ng-bind

来自分类Dev

在Dhall中的Optional上的`bind` /`flatMap` /`>> =`

来自分类Dev

在bind9上安装pihole

来自分类Dev

在非对象错误上的bind_param()

来自分类Dev

在重载的类方法上使用std :: bind()

Related 相关文章

  1. 1

    了解尝试并捕获node.js

  2. 2

    了解尝试并捕获node.js

  3. 3

    在 node.js 中尝试捕获设置

  4. 4

    在C中模拟std :: bind

  5. 5

    尝试在Node-JS / Express中代理图像

  6. 6

    尝试在Node.js中加载所有Firestore文档

  7. 7

    尝试访问Google Spreadsheets时使用Node.js

  8. 8

    Node.js Puppeteer UnhandledPromiseRejection警告尝试导航Google Maps

  9. 9

    尝试从Node.js获取信息SOAP时出错

  10. 10

    尝试使用node.js挂起系统返回集合

  11. 11

    尝试在 Node.js mssql 中的查询中传递参数

  12. 12

    Node JS - 尝试创建 PDF 时出现标题错误

  13. 13

    尝试用std :: bind重新分配std :: function并得到错误“试图引用已删除的函数”

  14. 14

    在node.js中使用Shell脚本尝试尝试同步行为

  15. 15

    使用React.js虚拟DOM在Node.js上模拟画布

  16. 16

    function(){}。bind(this)和angular.bind(this,function(){})之间的区别

  17. 17

    Bind callback function with multiple arguments

  18. 18

    何时在JS中使用.bind()

  19. 19

    为什么要应用Function.prototype.bind.bind?

  20. 20

    在Node.js和浏览器上拦截(模拟)http请求

  21. 21

    需要在模拟器上使用 node.js 创建自适应卡的示例代码

  22. 22

    尝试使用Node.js访问AWS EC2上的端口3000时出现ERR_SSL_PROTOCOL

  23. 23

    Express.js node.js 语法错误尝试 .update() mongoDB

  24. 24

    什么是PDO上的bind_result

  25. 25

    AngularJS在元素上嵌套ng-bind

  26. 26

    在Dhall中的Optional上的`bind` /`flatMap` /`>> =`

  27. 27

    在bind9上安装pihole

  28. 28

    在非对象错误上的bind_param()

  29. 29

    在重载的类方法上使用std :: bind()

热门标签

归档