2013-10-27 7 views
1

У меня есть этот код:Прототипы наследство понимание

И у меня есть один qustion: Class.prototype.method = function(){ // open method

, когда мы пишем, как мы сказать, что прототип нашего класса будет иметь этот метод. Так что его подклассы будут иметь этот метод. Но я не могу понять, почему мы не можем просто написать

Class.method = function() 
+1

Этот синтаксис рассматривает класс как обычный объект функции, а не в качестве конструктора экземпляров объектов класса. –

+0

@Jeffman - сообщите пожалуйста. на что вы указываете (ссылаетесь)? – ncm

+0

что ты спрашиваешь? вы говорите, в чем причина использования 'classname.prototype.methodname' и почему мы не используем' classname.methodname'? – ncm

ответ

1

Class.method = function() {};

Это было бы просто добавить method свойство на функцию конструктора Class. Функции - это объекты и могут хранить данные так же, как и любые другие объекты. Однако причина, по которой не будет добавлена ​​функция method в Class, проста: Это не то, как прототипное наследование реализовано в JavaScript.

Вы должны прочитать о What is the 'new' keyword in JavaScript?, и вы поймете, как настраивается цепочка прототипов и почему добавление элементов в конструктор не влияет на экземпляры, созданные с помощью этого конструктора.

Я думаю, что также стоит отметить, что ClassSub.prototype = new Class(); не является эффективным способом настройки цепи прототипа, так как он будет запускать код конструктора Class.

В современных браузерах вы можете просто использовать Object.create и есть прокладка для старых браузеров.

ClassSub.prototype = Object.create(Class.prototype);

+0

Я прочитал об этом, спасибо, я ... я думаю, мне нужно время, чтобы понять это ...)) – user2114177

0

Как уже упоминалось в комментариях, Class.method создает свойство для переменнойClass. не экземпляров от Class.

var Class = function() { /* some code */ } 
Class.method = function() { } 
console.log(Class.method); // function() { } 
console.log(new Class().method); // undefined 

Class.prototype.method = function() { } 
console.log(new Class().method); // function() { } 
Смежные вопросы