2011-07-18 22 views
12

Natknąłem się na funkcję o nazwie v8Locale w konsoli programisty Chrome. Byłem ciekaw, więc wszedłem do funkcji celu uzyskania kodu źródłowego, a to ujawnił następujący kod:Co oznacza słowo kluczowe "natywna" w JavaScript?

function (a){ 
native function NativeJSLocale(); 
var b=NativeJSLocale(a); 
this.locale=b.locale; 
this.language=b.language; 
this.script=b.script; 
this.region=b.region; 
} 

zacząłem szukać w internecie i znaleźć this file, który wydaje się być źródłem (wygląda na to, że został minified chociaż).

Nie mam pojęcia, co znaczy słowo kluczowe native. Kiedy próbuję zrobić coś takiego sam:

function bar() {} 

function foo() { 
    native function bar(); 
} 

pojawia się następujący komunikat o błędzie (tak jak się spodziewałem, faktycznie):

SyntaxError: Unexpected token native 

Jak to możliwe, że funkcja v8Locale zawiera native tokena i co to znaczy/robi?

+1

Źródło ścieżka 'src/extensions/experimental/i18n.js'. Brzmi jak plik rozszerzenia chrome. Możesz pisać rozszerzenia chrome w supeście JavaScript. – Raynos

+0

Może to kod przeglądarki. Na przykład, jeśli zobaczysz 'window.history.back' w konsoli Chromes i zobaczysz' function() {[kod natywny]} ' –

Odpowiedz

9

który jest używany, aby powiedzieć v8, że funkcja jest zaimplementowana w C++ kod

+2

Zauważ, że * natywny * nie implikuje' C++ '. Może to być dowolny język, na przykład Mozilla używała 'Java'. –

2

native Hasło nie zostało zdefiniowane w specyfikacji ECMAScript 5.

Brzmi to część rozszerzeniem chrom

+1

Nie jest zdefiniowany, ale jest zarezerwowany ... więc na pewno są ludzie, którzy mają pojęcie o co chodzi! –

+1

@AlexisWilke Został zarezerwowany, ponieważ jest to słowo kluczowe w języku Java. To samo dotyczy publicznych, prywatnych, ulotnych, zsynchronizowanych, przejściowych itp. Nie jest to jednak trudne i szybkie. Myślę, że zarezerwował kilka innych na wszelki wypadek. –

0

ActionScript, który opiera się również na ECMAScript definiuje rodzimą słowa kluczowego tutaj:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/statements.html#native

Oferują one przykład z kodem:

native function functionName(); 
class className { 
    native function methodName(); 
} 

I tam jest opis:

Umożliwia określenie, że funkcja lub metoda jest zaimplementowana przez program Flash Player w natywnym kodzie. Flash Player używa wewnętrznie słowa kluczowego do zadeklarowania funkcji i metod w interfejsie programowania aplikacji (API) ActionScript. Tego słowa kluczowego nie można użyć we własnym kodzie.

Jak wskazuje Matt, funkcje oznaczone jako rodzimy realizowane są w tłumacza, więc nie można samemu zdefiniować natywną funkcję (chyba dostosować kodu źródłowego interpretera JavaScript ...)