Errore nel javascript: oggetto non è una funzione

Quando ho eseguito il mio codice qui di seguito, mostra di errore object is not a function in console. Questo errore è su questa linea var todo = new Todo('contents'); nel mio script.js file. Come faccio a farlo funzionare?

Qui è il mio todo.js file

var Todo = (function(c) {
var contents = $('.' + c);

var showel = function (d) {
    contents.prepend(d);
},

add = function (name) {
    if(name != "") {
        var div = $('<div class="names"></div>')
        .append('<span>' + name + '</span>')
        .append("<button class='update' class='update'>Edit</button>")
        .append("<button class='remove' name='remove'>Remove</button>");
    }

    return showel(div);
},

addUpdateField = function (dom) {
    var name = dom.parent().find('span').text(),
        field = $('<input type="text" value="' + name + '" />'),
        update = $('<button class="updateBtn">Update</button>');
    dom.parent().html('').append(field).append(update);

    return;
},

update = function(el) {
    var val = el.parent().find('input').val();
    el.parent().html('<span>' + val + '</span>')
    .append('<button class="update" class="update">Edit</button>')
    .append('<button class="remove" class="remove">Remove</button>');

    return;
},

remove = function (el) {
    return el.remove();
};

return {
    add             : add,
    update          : update,
    remove          : remove,
    addUpdateField  : addUpdateField
};
})();

qui è il mio script.js file

$(function () {
var todo = new Todo('contents');

$('.addBtn').on('click', function() {
    var name = $(this).parent().find('input[type="text"]').val();
    todo.add(name);
});

$('.contents').on('click', '.remove', function() {
    var el = $(this).parent();
    todo.remove(el);
});

$('.contents').on('click', '.update', function() {
    var dom = $(this);
    todo.addUpdateField(dom);
});

$('.contents').on('click', '.updateBtn', function() {
    var el = $(this);
    todo.update(el);
});

});

qui è un codice html

<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js">    </script>
<script type="text/javascript" src="todo.js"></script>
<script type="text/javascript" src="script.js"></script>
<link rel="stylesheet" type="text/css" href="styles.css">
<title></title>
</head>

<body>
<div class="container">
    <label>Name</label>
    <input type="text" class="name" name="name" />
    <input type="button" class="addBtn" name="add" value="Add" />
    <div class="contents"></div>
</div>
</body>
</html>
si prega di dare il vostro file html
Penso che si dovrebbe cambiare il ASEF per una normale funzione
Che cosa si intende per ASEF?

OriginaleL’autore 2619 | 2012-08-14

One Reply
  1. 9

    Si sono immediatamente l’esecuzione della funzione che viene assegnata a Todo. Che la funzione restituisce un oggetto, in modo Todo si riferisce l’oggetto restituito, non una funzione (da qui il “Non è un errore di funzione).

    Presumo che hai inteso qualcosa lungo le linee di questo:

    var Todo = function () {
    
        this.add = function () { //Note the use of `this` here
            //Do stuff
        };
        //etc...
    
    }; //No self-invoking parentheses here

    Ora, Todo si riferisce a una funzione di costruzione che è possibile richiamare con il new operatore, come si sta attualmente cercando di fare.

    Anche notare che questo modello si tradurrà in ogni istanza di Todo avere una copia separata di ciascun metodo, che non è molto efficiente. Sarebbe meglio dichiarare i metodi come proprietà del prototype:

    var Todo = function () {
        //Initialize the Todo instance
    };
    Todo.prototype.add = function () {
        //Do stuff
    };

    Ora, tutti istanza di Todo condividere una singola copia dei metodi.

    Funziona in questo modo. Ma io volevo modificare il mio codice così che dovrebbe funzionare il modo in cui sto cercando di fare nel mio esempio di cui sopra. Come posso modificare il mio codice in modo che funzioni.
    Non capisco cosa stai cercando di ottenere… cosa c’è di sbagliato con la modifica per essere come questo?
    Sto imparando javascript.
    Sto cercando yo ottenere in questo modo dev.opera.com/articles/view/javascript-best-practices
    Che l’articolo è di descrivere come spazio dei nomi di funzioni… non è che descrive le funzioni di costruzione, che è ciò che è necessario qui. Gli esempi in questo articolo non dovesse essere chiamato con new. Inoltre, forse si dovrebbe ascoltare l’avvertimento all’inizio dell’articolo… “Questo articolo è obsoleto”.

    OriginaleL’autore James Allardice

Lascia un commento