Pergunta

Por exemplo, em PHP

class foo{
  function foo($name){ //constructor
    $this->name=$name;
  }
  function sayMyName(){
     return $this->name;
  }
}
class bar extends foo{
  function sayMyName(){
     return "subclassed ".$this->name;
  }
}

E em JS

function foo(name){
  this.name=name;
}
foo.prototype.sayMyName=function(){return this.name};

function bar(){}

bar.prototype=new foo();
bar.prototype.sayMyName=function(){return "subclassed "+this.name};

Eu sou novo para javascript, então por favor me esclarecer, não são funcionalmente idênticos, ou estou perdendo algo grande?
Se eles são idênticos, como é diferente clássica de protótipo?

Agradecemos antecipadamente ...

Foi útil?

Solução

Em JavaScript você pode alterar a herança como o programa está sendo executado, algo que você não pode fazer na programação clássica. Por exemplo:

function foo(name){
  this.name=name;
}
foo.prototype.sayMyName=function(){return this.name};

function foo2(name){
  this.name = name;
}
foo2.prototype.sayMyName = function(){return "My name is "+this.name;};

function bar(){}

bar.prototype = new foo();
var myBar = new bar();
myBar.name = "Marius";
alert(myBar.sayMyName());

bar.prototype = new foo2();
var myBar2 = new bar();
myBar2.name = "Marius";
alert(myBar2.sayMyName());

Outras dicas

JavaScript (como você observam com razão) usa um tipo específico de OOP que é protótipo baseado . Em JavaScript você não criar classes, você simplesmente clone objetos existentes e aumentando-os por meio de adição de membros para os seus protótipos.

Em PHP você está criando classes que são modelos para novos objetos.

I garantir para Andrew Hare e Marius. É tudo sobre ser capaz de mudar o que uma classe pode fazer por modificá-lo em tempo de execução. OOP clássico não permite que você faça isso, você tem que especificar exatamente o que uma classe / objeto pode fazer e quais propriedades dados que antes de compilar ou antes de ser interpretado (se uma linguagem interpretada).

O código que forneceu é funcionalmente idêntica mas isso é só porque você não tenha aproveitado protótipos em JS.

Class herança com base

  • Class e instância são distintos entidades .
  • Definir uma classe com uma definição de classe; instanciar uma classe com métodos construtores .
  • Criar um único objeto com o novo operador.
  • Construir um hierarquia de objetos usando definições de classe para definir subclasses de classes existentes.
  • propriedades Inherit seguindo da cadeia classe .
  • definição de classe especifica todas as propriedades de todas as instâncias de uma classe. Não é possível adicionar propriedades dinamicamente em tempo de execução .

protótipo baseado herança

  • Todos objetos são instâncias .
  • Definir e criar um conjunto de objetos com funções de construtor .
  • Criar um único objeto com o novo operador.
  • Construção uma hierarquia de objetos através da atribuição de um objeto como o protótipo associado com uma função de construtor.
  • propriedades Herdar seguindo a cadeia de protótipos .
  • função de construtor ou protótipos especifica um conjunto inicial de propriedades. É possível adicionar ou propriedades remove dinamicamente para objetos individuais ou para todo o conjunto de objetos.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top