Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Differenza tra prototipi delegati e clonazione di prototipi

    Ciao a tutti,
    Sul libro che sto leggendo ci sono 2 codici simili ma non riesco a capire perché il testo li definisce tali, a me sembrano assolutamente identici. L'output che ottengo è identico!
    1° CODICE
    codice:
    var switchProto = {
    isOn: function isOn() {
    return this.state;
    },
    toggle: function toggle() {
    this.state = !this.state;
    return this;
    },
    meta: {
    name: 'Light switch'
    },
    state: false
    },
    switch1 = $.extend({}, switchProto),
    switch2 = $.extend({}, switchProto);
    test('Prototype clones.', function () {
    switch1.isOn.isShared = true;
    ok(!switch2.isShared,
    'Methods are copied for each instance, not shared.'
    );
    ok(switch1.toggle().isOn(),
    '.toggle() works.'
    );
    ok(!switch2.isOn(),
    'instance safe.'
    );
    switch2.meta.name = 'Breaker switch';
    console.log(switch1.meta.name);
    
    switch2.meta = { name: 'Power switch' };
    console.log(switch1.meta.name);
    });
    2° CODICE
    codice:
    var switchProto = {
    isOn: function isOn() {
    return this.state;
    },
    toggle: function toggle() {
    this.state = !this.state;
    return this;
    },
    meta: {
    name: 'Light switch'
    },
    state: false
    },
    switch1 = Object.create(switchProto),
    switch2 = Object.create(switchProto);
    test('Prototype clones.', function () {
    switch1.isOn.isShared = true;
    ok(!switch2.isShared,
    'Methods are copied for each instance, not shared.'
    );
    ok(switch1.toggle().isOn(),
    '.toggle() works.'
    );
    ok(!switch2.isOn(),
    'instance safe.'
    );
    switch2.meta.name = 'Breaker switch';
    console.log(switch1.meta.name);
    
    switch2.meta = { name: 'Power switch' };
    console.log(switch1.meta.name);
    });
    DIFFERENZA TRA I DUE SCRIPT
    1° CODICE
    codice:
    switch1 = Object.create(switchProto),
    switch2 = Object.create(switchProto);
    2° CODICE
    codice:
    switch1 = $.extend({}, switchProto),
    switch2 = $.extend({}, switchProto);
    OUTPUT IDENTICO DEI 2 SCRIPT
    codice:
    "TEST SUPERATO: ok( true , Methods are copied for each instance, not shared. )"
    "TEST SUPERATO: ok( true , .toggle() works. )"
    "TEST SUPERATO: ok( true , instance safe. )"
    "Breaker switch"
    "Breaker switch"
    Più pratica in futuro...

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    extend non è una funzione javascript, è di qualche libreria tipo jquery. Quindi la differenza è che nel primo caso gli oggetti vengono creati con una funzione "esterna" nel secondo caso si usa javascript puro, oltre ovviamente che il primo esempio per funzionare necessita di un import di una libreria. Tu che cosa stai importando?

  3. #3
    Quote Originariamente inviata da Vindav Visualizza il messaggio
    extend non è una funzione javascript, è di qualche libreria tipo jquery. Quindi la differenza è che nel primo caso gli oggetti vengono creati con una funzione "esterna" nel secondo caso si usa javascript puro, oltre ovviamente che il primo esempio per funzionare necessita di un import di una libreria. Tu che cosa stai importando?
    Io importo jQuery e anche secondo me i due codici sono identici. Il testo invece dice che gli esempi sono diversi ed hanno output diversi. A dir la verità il libro usa extend() e non $.extend() in quanto fa riferimento a Undersore library invece che jQuery. Ho anche ipotizzato che i due extend(), quello di Uderscore e quello di jQuery, fossero diversi ma non sono riuscito a verificare in quanto importando la prima di queste librerie il codice va in errore. Ho già aperto un'altra discussione per questo problema ma mi sembra difficile che i comportamenti di questo extend() siano diversi per le 2 librerie.

    http://forum.html.it/forum/showthrea...readid=2924813
    Più pratica in futuro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.