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