2015-11-02 3 views
4
  1. Если $ является объектом то как JQuery в состоянии назвать его скобкой (), как $('#MYdIV'). Это мой первый и самый важный вопрос.

  2. Я пытаюсь изучить шаблоны проектирования и подстилающие механизмы создания объекта. Поэтому я хочу создать библиотеку, которая, когда пользователь вводит myLibrary({option1:true});, сможет создать экземпляр объекта без использования ключевого слова new.Just как jquery и вот так: https://github.com/bendc/animateplus/blob/master/animate.js В этом примере он не использует ключевое слово new или this. Он просто создает анимацию IIFE, которая возвращает другую функцию с тем же именем. Я не знаю, как он может это сделать. Является ли анимация привязана к глобальному объекту?

+0

Я получил '> TypeOf $ <- "функция"' – Tushar

+2

функции являются объектами в Javascript. Вот как. Прочтите вступительную статью о Javascript. –

+0

так что $ - функция-конструктор? – SSS

ответ

3

jQuery или $ - это просто функция. Рассмотрим следующий пример, который создает объект с аналогичным поведением.
Конечно, JQuery имеет гораздо более сложную и умную структуру, это всего лишь пример:

var not$ = function(o) { 
 
    var result = document.querySelectorAll(o); 
 
    
 
    result.customInnerText = function(text) { 
 
     if (text === undefined) { 
 
     return document.querySelector(o).innerText; 
 
     } else { 
 
     document.querySelector(o).innerText = text; 
 
     }  
 
    }; 
 
    result.customClickHandler = function(callback) { 
 
     document.querySelector(o).addEventListener('click', callback); 
 
    }; 
 

 
    return result; 
 
}; 
 
not$.customConsoleLog = function(text) { 
 
    console.log(text); 
 
}; 
 

 
not$("a").customClickHandler(function() { 
 
    var exampleText = not$("#title").customInnerText(); 
 
    not$("#text").customInnerText(exampleText + "It works!"); 
 

 
    not$.customConsoleLog(not$("p").length); 
 
    not$.customConsoleLog(not$("p")[0]); 
 
});

 
<a href="#">Click me!</a> 
 

 
<p id="title">Example:</p> 
 
<p id="text">Check!</p>

+0

Ницца! Я был смущен. Bc все используют новое ключевое слово при создании библиотеки. – SSS

+0

Что делать, если я хочу вернуть только 'not $ ('a')' и получить список элементов 'a'. Как это сделать в коде? – SSS

+0

@SaleSale Я предполагаю, что вы хотите использовать 'querySelectorAll' :) Просто перейдите в Google. –

1

(1) $ является не объект, а функция.

console.log(typeof $); 
// function 

Что может быть запутанным здесь - и это только предположение - это то, что вы можете получить доступ к свойствам на $ переменной, например $.extend или $.fn (используется при написании собственных плагинов jQuery). Это нормально, поскольку функции могут иметь свойства. Спецификации ECMAScript позволяют это.

(2) Функции конструктора могут быть использованы для создания новых объектов, но не требуется. Вы можете просто использовать объектные литералы, и это работает так же хорошо. Как отметил @Jeff в другом ответе, функция, вызываемая с помощью new, делает ее конструкторной функцией. В противном случае различий в синтаксисе нет. Вам решать, хотите ли вы использовать.

+2

Функции - это объекты. –

+0

@FelixKling point, просто случай, когда я указываю, что квадрат не является прямоугольником (хотя это и есть технически) – bguiz

+0

Почему тогда все используют ключевое слово 'new' при написании библиотеки или кода? – SSS

1

Сначала несколько терминов:

  • примитивным является one of the following: строка, число, логическое, нуль, неопределенная, символ
  • Объект является по существу любого рода вещи, что это не primitve в Javascript. Если это то, что вы хотите использовать или манипулировать, это объект.
  • Функция - это особый тип объекта, который может использоваться для запуска javascript. Это можно назвать синтаксисом function()
  • Конструктор только функция. Это функция, которая предназначена для вызова с ключевым словом new, как в new Thing(). Обратите внимание на заглавную букву - это соглашение.

Таким образом, мы можем видеть, что JQuery использует функцию, а не функцию-конструктор. В частности, если вы посмотрите на исходный код, мы найдем что-то вроде $ = function() {...}

И это в основном это - они определяют глобальную переменную под названием $ и определяют ее как функцию, которая может быть использована. Конечно, поскольку функции являются объектами, вы можете также делать такие вещи, как $.randomNumber = 4, без проблем, и это никоим образом не повлияет на JQuery.

Итак, если вы хотите сделать что-то подобное, вы захотите определить свою собственную глобальную переменную и установить ее как функцию - просто отдавайте себе отчет в том, что уже сделано - т. Е.не используйте $ или _ или что угодно.

+0

Примитивные значения не являются объектами. –

+0

@FelixKling haha, я как раз собирался прокомментировать это. Я отредактирую его. – Jeff

+0

Итак, jQuery или $ не является конструкторской функцией? Просто обычная функция, привязанная к глобальному объекту. – SSS

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