javascript TypeError: Не удается найти функцию запускается с - PullRequest
0 голосов
/ 01 июля 2011

У меня есть функция javascript:

           string.prototype.startsWith = function(str) {
               return (this.indexOf(str) === 0);
           }

, и когда я запускаю ее на чем-то, чей typeof возвращает object, это работает.Когда я запускаю его на том, чей typeof возвращает string, я получаю:

javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot find function startsWith. (<Unknown source>#29) in <Unknown source> at line number 29

Кто-нибудь знает, что происходит?Я даже не понимаю, почему тип экземпляра первой вещи, которую я использую, это объект.Это результат вызова readLine, разве это не строка?

<target name="analyze">
    <script language="javascript">

    <![CDATA[
            importClass(java.io.File);
            importClass(java.io.FileReader)
            importClass(java.io.BufferedReader)
            //setup the source directory
            dir = project.getProperty("PROJECT_HOME");
            fs = project.createDataType("fileset");
            fs.setDir(new File(dir));
            //only analyze java files
            fs.setIncludes("**/*.java");
            echo = project.createTask("echo");
            //iterate over files found
            srcFiles = fs.getDirectoryScanner(project).getIncludedFiles();
            for (i = 0; i < srcFiles.length; i++) {
                var filename = srcFiles[i];
                inFile  = new BufferedReader(new FileReader(new File(dir + "/" + filename)));
                while ((line = inFile.readLine()) != null) {
                   if(line.startsWith("package")) {
                       packageStr = line.substr(8);
                       while((line = inFile.readLine()) != null) {
                           if(line.startsWith("import") && line.endsWith("Foo;")) {
                               //strip out the leading import in 'import x.y.z'
                               var importStr = line.substr(7);
                               importStr = importStr.substr(0, importStr.lastIndexOf('.'));
                               if(!importStr.startsWith(packageStr)) { <---- FAILS!
                               }
                           }
                       }
                   }
                }
                inFile.close();
           }

           String.prototype.startsWith = function(str) {
               return (this.indexOf(str) === 0);
           }

           String.prototype.endsWith = function(str) {
               var lastIndex = this.lastIndexOf(str);
               return (lastIndex != -1) && (lastIndex + str.length == this.length);
           }

    ]]>
    </script>
</target>

Ответы [ 2 ]

2 голосов
/ 01 июля 2011

Я думаю, проблема в том, что вы вызываете функцию starstWith, прежде чем ее определить.Возможно, вам следует поставить два определения функций перед блоком for.Таким образом, они оцениваются до того, как их вызывают.

2 голосов
/ 01 июля 2011

попробуйте с большой буквы S:

String.prototype.startsWith = function(str) {
               return (this.indexOf(str) === 0);
           }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...