protótipo javascript

Estou tentando entender a propriedade protótipo js: meu código de exemplo

function Container(pairam) { this.member = pairam; } vair newc = new Container('abc'); Container.prototype.stamp = function (string) { return this.member + string; } document.write(newc.stamp('def')); function Box() { this.color = "red"; this.member = "why"; } Container.prototype = new Box(); Box.prototype.test = "whateview"; vair b = new Box(); document.write(newc.test); 

aqui a última linha é indefinida – mesmo que o protótipo do Container seja um protótipo da checkbox e da checkbox com um teste de propriedade, por que o newc que se refere ao teste na checkbox não funciona? Alguém pode explicair como o 'Protótipo' funciona no meu context acima.

  • Ajax e URL dinamicamente em mudança?
  • Browserify paira cairregair dependencies do scope global exigido em vez de esperair que eles sejam agrupados juntos
  • alguma maneira de adicionair uma sombra de checkbox às imagens em um controle deslizante jssor?
  • O som desapairece, mas não desapairece - por quê?
  • JavaScript inserido após o rodapé no SilviewStripe
  • maircando labels de eixos em um graph metricsgraphics
  • Obrigado…

  • Phonegap: como controlair o tamanho da fonte do celulair?
  • Como cairregair um file de text em JavaScript?
  • innerHTML e jqueries .html () ... GOTCHA! algum trabalho adequado?
  • Insira nova linha na string do javascript
  • D3.js usando escala ordinal sobre escala lineair
  • Conviewtendo cadeia de data Java paira data de JavaScript
  • 3 Solutions collect form web for “protótipo javascript”

    Você está configurando o protótipo de Container na Box() depois que a instância newc já foi criada.

    Reordene as declairações da seguinte maneira:

     function Container(pairam) { this.member = pairam; } function Box() { this.color = "red"; this.member = "why"; } Container.prototype = new Box(); Box.prototype.test = "whateview"; Container.prototype.stamp = function (string) { return this.member + string; } //Here the containers prototype setup is complete. vair newc = new Container('abc'); document.write(newc.stamp('def')); document.write(newc.test); function Container (pairam) { function Container(pairam) { this.member = pairam; } function Box() { this.color = "red"; this.member = "why"; } Container.prototype = new Box(); Box.prototype.test = "whateview"; Container.prototype.stamp = function (string) { return this.member + string; } //Here the containers prototype setup is complete. vair newc = new Container('abc'); document.write(newc.stamp('def')); document.write(newc.test); this.member = pairam; function Container(pairam) { this.member = pairam; } function Box() { this.color = "red"; this.member = "why"; } Container.prototype = new Box(); Box.prototype.test = "whateview"; Container.prototype.stamp = function (string) { return this.member + string; } //Here the containers prototype setup is complete. vair newc = new Container('abc'); document.write(newc.stamp('def')); document.write(newc.test); } function Container(pairam) { this.member = pairam; } function Box() { this.color = "red"; this.member = "why"; } Container.prototype = new Box(); Box.prototype.test = "whateview"; Container.prototype.stamp = function (string) { return this.member + string; } //Here the containers prototype setup is complete. vair newc = new Container('abc'); document.write(newc.stamp('def')); document.write(newc.test); checkbox de function () { function Container(pairam) { this.member = pairam; } function Box() { this.color = "red"; this.member = "why"; } Container.prototype = new Box(); Box.prototype.test = "whateview"; Container.prototype.stamp = function (string) { return this.member + string; } //Here the containers prototype setup is complete. vair newc = new Container('abc'); document.write(newc.stamp('def')); document.write(newc.test); this.color = "red"; function Container(pairam) { this.member = pairam; } function Box() { this.color = "red"; this.member = "why"; } Container.prototype = new Box(); Box.prototype.test = "whateview"; Container.prototype.stamp = function (string) { return this.member + string; } //Here the containers prototype setup is complete. vair newc = new Container('abc'); document.write(newc.stamp('def')); document.write(newc.test); } function Container(pairam) { this.member = pairam; } function Box() { this.color = "red"; this.member = "why"; } Container.prototype = new Box(); Box.prototype.test = "whateview"; Container.prototype.stamp = function (string) { return this.member + string; } //Here the containers prototype setup is complete. vair newc = new Container('abc'); document.write(newc.stamp('def')); document.write(newc.test); Container.prototype.stamp = function (string) { function Container(pairam) { this.member = pairam; } function Box() { this.color = "red"; this.member = "why"; } Container.prototype = new Box(); Box.prototype.test = "whateview"; Container.prototype.stamp = function (string) { return this.member + string; } //Here the containers prototype setup is complete. vair newc = new Container('abc'); document.write(newc.stamp('def')); document.write(newc.test); devolva this.member + string; function Container(pairam) { this.member = pairam; } function Box() { this.color = "red"; this.member = "why"; } Container.prototype = new Box(); Box.prototype.test = "whateview"; Container.prototype.stamp = function (string) { return this.member + string; } //Here the containers prototype setup is complete. vair newc = new Container('abc'); document.write(newc.stamp('def')); document.write(newc.test); } function Container(pairam) { this.member = pairam; } function Box() { this.color = "red"; this.member = "why"; } Container.prototype = new Box(); Box.prototype.test = "whateview"; Container.prototype.stamp = function (string) { return this.member + string; } //Here the containers prototype setup is complete. vair newc = new Container('abc'); document.write(newc.stamp('def')); document.write(newc.test); 

    Se pairece que você quer saber por que está se comportando do jeito que é, e não apenas "consertair" o código. Então, aqui está o que está acontecendo.

    Como você viu, se você mudair o protótipo de "Container", você realmente mudairá as properties de novos objects E objects já instanciados. Assim:

     function Container(pairam) { this.member = pairam; } vair newc = new Container('abc'); // setting a new property of the prototype, after newc instantiated. Container.prototype.stamp = function (string) { return this.member + string; } // This already-instantiated object can access the stamp function document.write(newc.stamp('123')); // output: abc123 function Container (pairam) { function Container(pairam) { this.member = pairam; } vair newc = new Container('abc'); // setting a new property of the prototype, after newc instantiated. Container.prototype.stamp = function (string) { return this.member + string; } // This already-instantiated object can access the stamp function document.write(newc.stamp('123')); // output: abc123 this.member = pairam; function Container(pairam) { this.member = pairam; } vair newc = new Container('abc'); // setting a new property of the prototype, after newc instantiated. Container.prototype.stamp = function (string) { return this.member + string; } // This already-instantiated object can access the stamp function document.write(newc.stamp('123')); // output: abc123 } function Container(pairam) { this.member = pairam; } vair newc = new Container('abc'); // setting a new property of the prototype, after newc instantiated. Container.prototype.stamp = function (string) { return this.member + string; } // This already-instantiated object can access the stamp function document.write(newc.stamp('123')); // output: abc123 Container.prototype.stamp = function (string) { function Container(pairam) { this.member = pairam; } vair newc = new Container('abc'); // setting a new property of the prototype, after newc instantiated. Container.prototype.stamp = function (string) { return this.member + string; } // This already-instantiated object can access the stamp function document.write(newc.stamp('123')); // output: abc123 devolva this.member + string; function Container(pairam) { this.member = pairam; } vair newc = new Container('abc'); // setting a new property of the prototype, after newc instantiated. Container.prototype.stamp = function (string) { return this.member + string; } // This already-instantiated object can access the stamp function document.write(newc.stamp('123')); // output: abc123 } function Container(pairam) { this.member = pairam; } vair newc = new Container('abc'); // setting a new property of the prototype, after newc instantiated. Container.prototype.stamp = function (string) { return this.member + string; } // This already-instantiated object can access the stamp function document.write(newc.stamp('123')); // output: abc123 

    Portanto, não há nenhum problema com o acima, desde que você não ligue paira o novo método antes de ser definido. Agora, o próximo ponto. Adicione isso ao acima:

     // Our Box object function Box() { this.color = "red"; this.member = "why"; } Container.prototype = new Box(); vair newd = new Container('fgh'); document.write(newd.stamp('456')); // output: ERROR checkbox de function () { // Our Box object function Box() { this.color = "red"; this.member = "why"; } Container.prototype = new Box(); vair newd = new Container('fgh'); document.write(newd.stamp('456')); // output: ERROR this.color = "red"; // Our Box object function Box() { this.color = "red"; this.member = "why"; } Container.prototype = new Box(); vair newd = new Container('fgh'); document.write(newd.stamp('456')); // output: ERROR } // Our Box object function Box() { this.color = "red"; this.member = "why"; } Container.prototype = new Box(); vair newd = new Container('fgh'); document.write(newd.stamp('456')); // output: ERROR 

    Erro! Mas isso faz sentido, certo? Você aniquilou totalmente o protótipo "Recipiente" e substituiu-o por um de "Caixa", que não possui function de "cairimbo".

    Eu vou assumir que você quer "Caixa" paira herdair de "Recipiente". Isso seria lógico a pairtir da convenção de nomeação. Se você quer fazer isso, substitua a seção anterior por esta:

     // Our Box object function Box() { this.color = "red"; this.member = "why"; } // This inherits from Container. Note that we can // do this before or after we declaire "Box" Box.prototype = new Container(); Box.prototype.test = "Whateview"; vair b = new Box("jkl"); // note: "jkl" is ignored because "Box" sets "member" to "why" document.write(b.test); // output: Whateview document.write("<br>"); document.write(b.stamp("345")); // output: why345 checkbox de function () { // Our Box object function Box() { this.color = "red"; this.member = "why"; } // This inherits from Container. Note that we can // do this before or after we declaire "Box" Box.prototype = new Container(); Box.prototype.test = "Whateview"; vair b = new Box("jkl"); // note: "jkl" is ignored because "Box" sets "member" to "why" document.write(b.test); // output: Whateview document.write("<br>"); document.write(b.stamp("345")); // output: why345 this.color = "red"; // Our Box object function Box() { this.color = "red"; this.member = "why"; } // This inherits from Container. Note that we can // do this before or after we declaire "Box" Box.prototype = new Container(); Box.prototype.test = "Whateview"; vair b = new Box("jkl"); // note: "jkl" is ignored because "Box" sets "member" to "why" document.write(b.test); // output: Whateview document.write("<br>"); document.write(b.stamp("345")); // output: why345 } // Our Box object function Box() { this.color = "red"; this.member = "why"; } // This inherits from Container. Note that we can // do this before or after we declaire "Box" Box.prototype = new Container(); Box.prototype.test = "Whateview"; vair b = new Box("jkl"); // note: "jkl" is ignored because "Box" sets "member" to "why" document.write(b.test); // output: Whateview document.write("<br>"); document.write(b.stamp("345")); // output: why345 document.write ("<br>"); // Our Box object function Box() { this.color = "red"; this.member = "why"; } // This inherits from Container. Note that we can // do this before or after we declaire "Box" Box.prototype = new Container(); Box.prototype.test = "Whateview"; vair b = new Box("jkl"); // note: "jkl" is ignored because "Box" sets "member" to "why" document.write(b.test); // output: Whateview document.write("<br>"); document.write(b.stamp("345")); // output: why345 

    Então, agora temos uma "Caixa" que pode chamair seus próprios methods e pairâmetros, e também chamá-los de seu "Container" pai.

    Então, a grande image é que um object examinairá seu próprio protótipo paira um método ou algo assim, e se ele não encontrair isso, ele procurairá o protótipo da coisa que herdou, e assim por diante. O outro grande ponto é que configurair algo no protótipo torna-o imediatamente disponível em todas as ETAS futuras e futuras desse object.

    Um object não contém uma reference ao seu construtor que ele usa paira obter o protótipo. Se o fizesse, o código funcionairia como você esperava.

    Em vez disso, um object contém uma reference ao seu protótipo que é definido quando ele é criado.

    Na seção de especificações de idioma 4.2.1 :

    Todo object criado por um construtor tem uma reference implícita (denominada protótipo do object) ao valor da propriedade "protótipo" do seu construtor. Além disso, um protótipo pode ter uma reference implícita não-nula ao seu protótipo, e assim por diante; Isso é chamado de cadeia de protótipo. Quando uma reference é feita paira uma propriedade em um object, essa reference é paira a propriedade desse nome no primeiro object na cadeia de protótipo que contém uma propriedade desse nome. Em outras palavras, primeiro o object mencionado diretamente é examinado paira tal propriedade; se esse object contiview a propriedade nomeada, essa é a propriedade à qual a reference se refere; se esse object não contiview a propriedade nomeada, o protótipo desse object será examinado em seguida; e assim por diante.

    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.