Я изучаю javascript какое-то время. В прочитанной книге говорится, что Javascript является функциональным интерпретированным языком. Но многие другие ресурсы, с которыми я столкнулся, говорят, что Javascript ориентирован на объекты. Итак, к какому именно JS принадлежит? Или это не имеет большого значения? Благодаря
Является ли javascript объектно-ориентированным языком?
Ответ 1
У JavaScript есть объекты. Я бы сказал, что это гибрид: интерпретируемый, функциональный, объектно-ориентированный и динамический.
Я думаю, что эти характеристики очень важны. Это то, что делает его хорошим языком, который важнее каждый день.
Ответ 2
JavaScript - это не традиционный объектно-ориентированный язык, поскольку не существует способа определить типичный класс. Вместо этого он использует прототипное наследование.
Есть способы имитировать традиционные классы с такими фреймворками, как Prototype и MooTools, хотя на самом деле это не родная конструкция JavaScript.
В конце концов, это не имеет значения, если вы можете написать код, который легко понять и обслуживать. Проверьте ресурсы, например Основы jQuery. Несмотря на специфику jQuery, главы 2, 9 и 10 применимы ко всем разработчикам JavaScript.
Ответ 3
Да. Вы можете использовать javascript как традиционный объектно-ориентированный язык:
//Animal Class
function Animal(_name){
this.name = _name;
}
Animal.prototype.sleep = function(){
console.log('zzzz');
}
Animal.prototype.talk = function(){
console.log('Hey! how\ it going?');
}
// Dog Class
function Dog(_name){
// call the parent constructor
Animal.apply(this,arguments);
}
// extends the Animal prototype chain
Dog.prototype = new Animal();
Dog.constructor = Dog;
Dog.prototype.talk = function(){
console.log('woof woof');
}
//MAIN
var dog = new Dog('roofus');
dog.sleep(); //produces 'zzzzz'
dog.talk(); //produces 'woof woof'
Этот метод эмулирует классическую модель наследования и часто упоминается как "псевдоклассическое наследование"
Javascript построен вокруг прототипального наследования. Вместо того, чтобы расширять классы, вы вместо этого расширяете объекты (прототипы). Вы также можете использовать наследование с помощью этой техники.
var Animal = (function(){
//everything inside the closure
//above outside returned object acts as a private variable
var private = "private variable";
//everything returned is a public field of the object
var self = {};
self.name = null;
self.sleep = function(){
console.log('zzzzz');
};
self.talk = function(){
console.log('hey how\s it going');
};
return self;
})();
var Dog = (function(){
var self = Object.create(Animal);
self.talk = function(){
console.log('woof woof')
};
})();
//MAIN
var dog = Object.create(Dog);
dog.name = "roofus";
dog.sleep(); //produces 'zzzzz'
dog.talk(); //produces 'woof woof'
Важно понять, как/почему это работает. Object.create создает новый объект и делает скрытый "prototype" (proto) этот объект аргументом, в котором вы проходите. Способ работы javascript по существу, когда вы обращаетесь к полю объекта (примитив, метод, объект). js-движок пересекает свойства, определенные на этом объекте, если свойство найдено, оно возвращается, если оно не проверяет свойство скрытого прототипа proto объекта и делает то же самое. Он делает это рекурсивно до тех пор, пока вся цепочка прототипов не будет обыскана или что-то не будет возвращено.
Также важно помнить, что ООП - это нечто большее, чем просто наследование. Важные конструкции ООП, такие как композиция и инкапсуляция, имеют основополагающее значение для написания хорошо структурированного javascript.
Ответ 4
JavaScript поддерживает методы функционального программирования, но я не считаю, что вы могли бы классифицировать его как функциональный язык как таковой. Все чаще в эти дни (все основные браузеры?) Это тоже не интерпретируется. Поэтому, я думаю, вы могли бы сказать, что это не "функциональный интерпретируемый язык".
Если вас интересует функциональное программирование в JavaScript, ознакомьтесь с некоторыми ответами на этот вопрос для получения дополнительных идей и ссылок: Javascript как функциональный язык
Ответ 5
Зависит от того, что вы называете объектно-ориентированным языком. JS не имеет (примитивных) классов, но имеет
- Метод отправки с точечной записью:
x.method()
- и, следовательно, полиморфизм
- Наследование (хотя и прототипное)
- Сбор мусора
- Все это объект
Выглядит OO достаточно для меня!