首页 > 解决方案 > 如何制作一个功能,使功能?

问题描述

好的,现在是凌晨 3 点,这个愚蠢的问题让我保持清醒,整夜困扰我,基本上我想做的是创建一个函数,将现有函数作为参数返回构造函数,也许这会很明显阅读我的代码

var f = function() {
  return function(p) {
    return document.createElement(p)
  }
};
var x = f();
alert(x); //alerts function(p){ return document.createElement(p)}
var n = x("div"); //it creates div Element
alert(n); // alert [object HTMLDivElement]

上面的代码工作得很好,但我想使用变量而不是将 createElement 直接放在构造函数中,我想像这样将它作为参数传递给函数 f

var f = function(dd) {
  return function(p) {
    return dd(p)
  }
};
var x = f(document.createElement);
alert(x); //alerts function(p){ return dd(p)}
var n = x("div"); //doesn't createElement
alert(n); //doesn't alert

除此之外,最后一个代码在控制台非法调用中输出了一些奇怪的东西,我不知道 wmy 代码出了什么问题,请帮忙?

标签: javascriptfunctionconsole

解决方案


您必须将createElement方法绑定到document对象。否则,您正在调用一个方法,但它没有正确的上下文。

var f = function(dd) {
  return function(p) {
    return dd(p)
  }
};
var x = f(document.createElement.bind(document));
alert(x);
var n = x("div");
alert(n);

箭头函数版本将是

var f = dd => p => dd(p);
var x = f(document.createElement.bind(document));
alert(x);
var n = x("div");
alert(n);


推荐阅读