2013-09-16 2 views
1

Я немного любопытно Javascript прототип я нашел образец в here и я сделал небольшое изменение, так что я могу попробовать, как это:Что такое прототип javascript?

<html> 
<body> 
    <script> 
     function Product(name, price) { 
      this.name = name; 
      this.price = price; 
     } 

     function Food(name, price) { 
      Product.call(this, name, price); 
      this.category = 'food'; 
      this.otherName = name; 
     } 
     Food.prototype = new Product(); 

     function Toy(name, price) { 
      Product.call(this, name, price); 
      this.category = 'toy'; 
     } 
     Toy.prototype = new Product(); 

     var cheese = new Food('feta', 5); 
     var fun = new Toy('robot', 40); 
     var prod = new Product('test', 20); 
     console.log(cheese); 
     console.log(fun); 
     console.log(prod); 
    </script> 
</body> 
</html> 

и возвращается, как этот

cheese = Food {name: "feta", price: 5, category: "food", otherName: "feta", name: undefined, price: undefined} 
fun = Toy {name: "robot", price: 40, category: "toy", name: undefined, price: undefined} 
prod = Product {name: "test", price: 20} 

его сделать имущество name и price дважды, более эффективно, если мы различаем Food.prototype = new Product(); и Toy.prototype = new Product();

Почему я должен использовать эту строку?

+1

Непонятный вопрос. Но вместо использования '.protoype = new Foo()' вы должны использовать 'Object.create' для настройки наследования. Посмотрите http://stackoverflow.com/q/17392857/218196. –

+0

Я думаю, что это ошибка в статье. Выполнение 'Food.prototype = new Product();' кажется бессмысленным. – freakish

+0

@ freakish: Я думаю, что это чтобы продемонстрировать наследование. – simonzack

ответ

3

Каждый объект JavaScript имеет второй объект JavaScript (или null, , но это редкость), связанный с ним. Этот второй объект известен как прототип, а первый объект наследует свойства прототипа.

Все объекты, созданные объектными литералами, имеют один и тот же объект-прототип, и мы можем ссылаться на этот объект-прототип как на код Object.prototype. Объекты, созданные с использованием нового ключевого слова и вызова конструктора, используют свойство прототипа функции-конструктора в качестве своего прототипа. Таким образом, объект, созданный new Object() , наследует от Object.prototype как объект, созданный {}. Аналогично, объект , созданный new Array(), использует в качестве прототипа Array.prototype, а объект , созданный new Date(), использует в качестве прототипа Date.prototype.

1

Ну, свойство prototype позволяет добавлять свойства и методы к объекту.

образца, чтобы понять: -

<!DOCTYPE html> 
<html> 
<body> 

<script> 

function employee(name,jobtitle,born) 
{ 
this.name=name; 
this.jobtitle=jobtitle; 
this.born=born; 
} 
var fred=new employee("Fred Flintstone","Caveman",1970); 

employee.prototype.salary=null; 

fred.salary=20000; 

document.write(fred.salary); 

</script> 

</body> 
</html> 

В приведенном выше примере мы добавляем еще одно свойство (оклада) сотруднику, используя прототип.

Надеется, что это поможет ...

0

как объектно-ориентированного программирование, все объекты JS являются потомком класса объектов, они наследуют все свойства от Object.prototype, в то время как вы можете изменить их. Объект также может иметь нулевой прототип, т. Е. Object.create (null) ..

Смежные вопросы