2014-02-12 3 views
1

Я пытаюсь использовать объект я разоблачить из файла JavaScript в использовании browserify, но я получаю ошибку Uncaught TypeError: undefined is not a functionСоздать новый объект из экспорта модулей с использованием bowserify

Вот пример:

foo.js:

var foo = function() { 
    this.f1 = function(){ 
    console.log('function1') 
    } 
    this.f2 = function(){ 
    console.log('function2') 
    } 
}; 

module.exports = foo; 

Я пытаюсь использовать foo в index.html.

после ввода команды: browserify foo.js > bundle.js

и включают в себя bundle.js в HTML-файл.

index.html:

<html> 
    <head> 
    <script src="./bundle.js"></script> 
    <script> 
     var foo = new foo(); // Uncaught TypeError: undefined is not a function 

     foo.f1(); 
    </script> 
    </head> 

    <body> 

    </body> 
</html> 

Что я делаю неправильно с browserify? Заранее спасибо.


EDIT: для неправильного примера.

оригинальный неправильный пример

foo.js:

var foo = { 
    f1: function(){ 
    console.log('function1') 
    }, 
    f2: function(){ 
    console.log('function2') 
    } 
}; 

module.exports = foo; 

ответ

0
browserify foo.js --standalone foo > bundle.js 
3

Если вы хотите использовать новый, вы должны объявить класс Foo как:

foo = function() { 
    this.f1 = function(){ 
    console.log('function1') 
    }; 
    this.f2 = function(){ 
    console.log('function2') 
    }; 
}; 

foo_obj = new foo(); 
foo_obj.f1(); 
foo_obj.f2(); 

Вместо буквальным. В противном случае просто методы объекта foo.

var foo = { 
    f1: function(){ 
    console.log('function1') 
    }, 
    f2: function(){ 
    console.log('function2') 
    } 
}; 

foo.f1(); 
foo.f2(); 

Update:

Давайте посмотрим, я никогда не использовал browserify, но в соответствии с их docs, вы должны сделать что-то вроде:

foo.js, тогда

module.exports = function() { 
    this.f1 = function(){ 
    console.log('function1') 
    }, 
    this.f2 = function(){ 
    console.log('function2') 
    } 
}; 

main.js

var foo = require('foo'); 

Затем, сделайте следующее:

browserify main.js -o bundle.js 

И, наконец, импортировать bundle.js и использовать new foo() для создания объекта внутри вашего сценария.

+0

Мы работали параллельно и ты превзошел меня. Я чествую вас с upvote @Sergio Aristizábal –

+0

Извините, я совершил тупую ошибку. Но после того, как я изменил ваш ответ, я все еще не могу определить функцию в 'browserify' – LiJung

+0

. Мой оригинальный код похож на тот, который вы ответили. Извините за неправильный образец. – LiJung

1

Вы пытаетесь создать экземпляр объекта, как если бы это была функция, например.

new {}; // invalid!! 
new function() {}; // valid! 

Я бы порекомендовал вам использовать либо

exports.foo1 = function() { console.log('foo'); } 
exports.bar1 = function() { console.log('bar'); } 

или, если вы действительно хотите сохранить new foo() использование:

module.exports = foo; 
function foo() { 
    this.foo1 = function() { console.log('foo'); } 
    this.bar1 = function() { console.log('bar'); } 
}