Подтвердить что ты не робот

Является ли javascript объектно-ориентированным языком?

Я изучаю javascript какое-то время. В прочитанной книге говорится, что Javascript является функциональным интерпретированным языком. Но многие другие ресурсы, с которыми я столкнулся, говорят, что Javascript ориентирован на объекты.  Итак, к какому именно JS принадлежит? Или это не имеет большого значения? Благодаря

4b9b3361

Ответ 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 достаточно для меня!