Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript策略设计模式问题_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript策略设计模式问题

Javascript策略设计模式问题,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我遵循这个要点来设计一个策略模式。 几个月前我实现了这个功能,chrome扩展在我实现它时没有抛出任何错误,但现在它抛出了一个错误 “未捕获类型错误:此.strategy不是函数” 这很奇怪,因为依赖此代码的函数仍在运行,但其他一些不依赖此代码的代码是有限的 关于如何修复它有什么想法吗?您需要在这里发布完整的代码,以便有人能够解决问题。但是从异常文本来看,似乎您正在将未定义的策略或“不是函数的变量”传递给构造函数。以下示例将给出相同的“未捕获类型错误:this.strategy不是函数异常:

我遵循这个要点来设计一个策略模式。

几个月前我实现了这个功能,chrome扩展在我实现它时没有抛出任何错误,但现在它抛出了一个错误

“未捕获类型错误:此.strategy不是函数”

这很奇怪,因为依赖此代码的函数仍在运行,但其他一些不依赖此代码的代码是有限的


关于如何修复它有什么想法吗?

您需要在这里发布完整的代码,以便有人能够解决问题。但是从异常文本来看,似乎您正在将未定义的策略或“不是函数的变量”传递给构造函数。以下示例将给出相同的
“未捕获类型错误:this.strategy不是函数
异常:

// This is the Greeter constructor.
var Greeter = function(strategy) {
    this.strategy = strategy;  
};

// Greeter provides a greet function that is going to
// greet people using the Strategy passed to the constructor.
Greeter.prototype.greet = function() {
  return this.strategy();
};

// Here are a couple of Strategies to use with our Greeter.
var politeGreetingStrategy = function() {
 console.log("Hello."); 
};

var friendlyGreetingStrategy = function() {
  console.log("Hey!");
};

var boredGreetingStrategy = function() {
  console.log("sup.");
};

var undefinedStrategy; //Not a function variable

// Let's use these strategies!
var politeGreeter   = new Greeter(politeGreetingStrategy);
var friendlyGreeter = new Greeter(friendlyGreetingStrategy);
var boredGreeter    = new Greeter(boredGreetingStrategy);
var wrongGreeter = new Greeter(undefinedStrategy); //No such strategy defined

politeGreeter.greet();   //=> Hello.
friendlyGreeter.greet(); //=> Hey!
boredGreeter.greet();    //=> sup.
wrongGreeter.greet();   //-> uncaught type

这主要是关于您从MessageHandling创建的对象,如果您在创建对象时传递了正确的函数,那么它应该始终工作

var MessageHandling = function(strategy) {
    this.strategy = strategy;
};
MessageHandling.prototype.greet = function() {
    return this.strategy();
};
var m = new MessageHandling(function(){console.log('hello');});
m.greet();

上述代码将始终有效,但如果您通过传递非函数的参数或根本不传递参数来实例化MessageHandling,则它将抱怨this.strategy不是函数。因此,您需要确保在创建MessageHandling对象时将正确的函数传递给MessageHandling。

听起来您不是一名pa将一个函数传递给MessageHandling你是说我的其他代码没有正确地传递给MessageHandling吗?我们需要查看所有的iThanks!这是一个很大的帮助。我注释了一些旧的MessageHandling策略,如果它们在当前状态下真的将函数传递给处理程序,那么这些策略是值得怀疑的。Life saver!
var MessageHandling = function(strategy) {
    this.strategy = strategy;
};
MessageHandling.prototype.greet = function() {
    return this.strategy();
};
var m = new MessageHandling(function(){console.log('hello');});
m.greet();