JavaScript'te 'tanım' ne için kullanılır (açık olanın dışında)?


161

Ben bu konuda belgeler için yüksek ve düşük aradım, ama hiçbir yerde hiçbir şey bulamıyorum.

Aloha kullanıyorum ve diğer eklenti işlevlerine bağlı yeni bir kenar çubuğu oluşturmak için kenar çubuğu prototipini kullanmak istiyorum.

Onların sidebar.js bununla başlar, ama hayatım boyunca ne anlama geldiğini açıklayan herhangi bir belge bulamıyorum.

define( [
    'aloha/core',
    'aloha/jquery',
    'aloha/selection'
], function (Aloha, jQuery, Selection, Plugin) {

Daha sonra bir grup işlevi tanımlamak için o sarmalayıcıda devam ediyor, bu yüzden varsbazılarını proptotypes- başımı etrafta dolaştırabileceğim ...

Bu ne diyor veya bir açıklama nerede bulabilirim?


Yanıtlar:


173

Komut dosyasının tamamını görmeden kesin olarak söyleyemem, ancak defineRequireJS'den , özellikle bu işlevin " bağımlılıklarla tanımla " formundan olması muhtemeldir . Bir "modül" tanımlamak için kullanılır:

Bir modül, geleneksel bir komut dosyasından farklıdır, çünkü genel ad alanını kirletmekten kaçınan iyi kapsamlı bir nesne tanımlar. Bağımlılıklarını açıkça listeleyebilir ve genel nesnelere başvurmaya gerek kalmadan bu bağımlılıkları ele alabilir, ancak bunun yerine modülü tanımlayan işleve bağımsız değişken olarak bağımlılıkları alabilir.

Ve "bağımlılıklarla tanımla" formu defineşu şekilde açıklanmaktadır:

Modülün bağımlılıkları varsa, ilk argüman bir bağımlılık adları dizisi ve ikinci bağımsız değişken bir tanım işlevi olmalıdır. Tüm bağımlılıklar yüklendikten sonra modülü tanımlamak için işlev çağrılır. İşlev, modülü tanımlayan bir nesne döndürmelidir.


1
evet şu kesinlikle BT require.js onun parçası öylesine ve işaretlemenin kullanımı sen gerekmez requirejs.org
David O'Sullivan

4
ve hangi IE sürümleri bunu desteklemiyor ... ;-)
Simon_Weaver

1
@Simon_Weaver - Ne demek istediğinizden emin değilim ... RequireJS IE6 + tarafından desteklenmektedir .
James Allardice

bunu bilmek güzel :) Biraz huysuz oluyordum, ama bunun
IE6'dan

1
@Simon_Weaver Bir Javascript dili yapısı değil, sıradan bir Javascript işlevi. Köşeli ayraçlar bir dizi oluşturur. Yoksa bahsettiğiniz yapı bu mu?
Robin Green

3

Bu, AMD'nin ortakJS gibi bir şey yerine async'i temel olarak içe aktarmanız gerektiğinde kullandığı Asenkron Modül Tanımını temsil ettiği modülleri yazmak için AMD modelidir.

define(['module1', 'module2'], function(module1, module2) {
  console.log(module1.sayHi());
});

Define, bir dizi bağımlılık alır ve bunların tümü arka planda (async) engellenmeyen bir şekilde yüklendikten sonra, tanımlama, geri çağrıları çağırır ve bu da bağımsız değişkenleri kabul eder (bu durumda bağımlılıklar).

Dikkat edilmesi gereken başka bir şey de, bu modüllerin her birinin "define" anahtar sözcüğü kullanılarak tanımlanması gerektiğidir. Yani örneğin modül1 aşağıdaki gibi tanımlanır:

define([], function() {

  return {
    sayHi: function() {
      console.log('Hi Hi');
    },
  };
});

Modül yazmanın bu yolu (AMD), tarayıcı uyumluluğu göz önünde bulundurularak yazmanıza olanak tanır (nodeJS'de olduğu gibi (gerek yok)) ve aynı zamanda nesneler, JSON vb.

Unutmayın, AMD'nin kendi çöküşleri var. Umarım bu birine yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.