Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.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 CoffeeScript类扩展-TypeError:Object#<;谷歌>;没有方法';执行';_Javascript_Coffeescript - Fatal编程技术网

Javascript CoffeeScript类扩展-TypeError:Object#<;谷歌>;没有方法';执行';

Javascript CoffeeScript类扩展-TypeError:Object#<;谷歌>;没有方法';执行';,javascript,coffeescript,Javascript,Coffeescript,当我执行 class Search perform: (text) -> query = encodeURIComponent text results = '' request {uri: @uri + query }, (error, response, body) => if !error? && response.statusCode == 200 window = jsdom.jsdom(body).c

当我执行

class Search
  perform: (text) ->
    query = encodeURIComponent text
    results = ''
    request {uri: @uri + query }, (error, response, body) =>
      if !error? && response.statusCode == 200
        window = jsdom.jsdom(body).createWindow()
        jsdom.jQueryify window, './jquery-1.5.min.js', (window, jquery) =>
          $ = window.$
          jquery(@pattern).each (i, lmn) =>
            link = $(lmn).text() + " - " +  $(lmn).attr('href') 
            if requiresHttp? && /^http/.exec  $(lmn).attr('href')
              results = results + link + "\n"
            else
              results = results + link + "\n"
          @emit 'end', results

sys.inherits(Search, process.EventEmitter)

class Google extends Search
  @uri     = 'http://www.google.com/search?q='
  @pattern = '#ires ol li .r a'
它返回错误“TypeError:Object”#谷歌没有“perform”方法。extend不应该提供这种方法吗

更新

发布后不久,我重新考虑了代码。工作结果如下:

google = new Google
google.perform 'blah'

CD Sandchez的评论是正确的。如果您剪掉
sys.inherits
行,则
perform
运行

您应该做的是始终使用CoffeeScript继承:

{EventEmitter} = require "events"
request        = require 'request'
jsdom          = require 'jsdom'


class Search extends EventEmitter
  constructor: ->
    @linkPrefix   = ''
    @requiresHttp = false
    @uri          = ''
    @pattern      = ''
  perform: (text) ->
    query = encodeURIComponent text
    results = ''
    request {uri: @uri + query }, (error, response, body) =>
      if !error? && response.statusCode == 200
        window = jsdom.jsdom(body).createWindow()
        jsdom.jQueryify window, './jquery-1.5.min.js', (window, jquery) =>
          $ = window.$
          jquery(@pattern).each (i, lmn) =>
            link = $(lmn).text() + " - " + @linkPrefix + $(lmn).attr('href') 
            if @requiresHttp?
              if /^http/.exec  $(lmn).attr('href')
                results = results + link + "\n"
            else
              results = results + link + "\n"
          @emit 'end', results

class Google extends Search
  constructor: ->
    @uri          = 'http://www.google.com/search?q='
    @pattern      = '#ires ol li .r a'
    @requiresHttp = true

class Youtube extends Search
  constructor: ->
    @uri          = 'http://www.youtube.com/results?search_query='
    @pattern      = '#search-results h3 a'
    @linkPrefix   = 'http://www.youtube.com'


exports.Google  = Google
exports.Youtube = Youtube

它应该会起作用。也许当您从
EventEmitter
继承时,它会弄乱原型?您应该查看生成的代码。顺便说一句,您可以做的另一个更改是编写
class exports.Google
class exports.Youtube
,而不是单独执行
exports.Google=Google
exports.Youtube=Youtube
行。当然,这两种方法都有效;这只是一种风格的选择。整洁-我会试一试,谢谢。是的,事实证明这是问题的一部分。无论出于什么原因,我从未收到有人回复的电子邮件通知。不过,谢谢!
class Search extends process.EventEmitter