Sanırım her satıcı bunu göre uygulamak gerekiyordu şartnameye
Gerçek uygulama, örneğin V8 biraz karmaşık olabilir, bakın bir başlangıç için bu cevaba . Ayrıca github'da v8 kaynağına başvurabilirsiniz, ancak izolasyonda sadece bir parçayı anlamak kolay olmayabilir.
Yukarıdaki cevaptan alıntı:
V8 geliştiricisi burada. "Builtins" için birkaç farklı uygulama tekniğimiz var: bazıları C ++, bazıları Torque, bazıları CodeStubAssembler dediğimiz, bazıları ise doğrudan montajda. V8'in önceki sürümlerinde, bazıları JavaScript ile uygulanmıştı. Bu stratejilerin her birinin kendi güçlü yanları vardır (kod karmaşıklığı, hata ayıklama, çeşitli durumlarda performans, ikili boyut ve bellek tüketimi); artı her zaman kodun zaman içinde gelişmesinin tarihsel nedeni vardır.
ES2015 teknik özellikleri:
- Let O (ToObject olmak bu değer).
- ReturnIfAbrupt ( O ).
- Let len be ToLength (Al ( Ey ,
"length"
)).
- ReturnIfAbrupt ( len ).
- IsCallable ( callbackfn ) yanlışsa , TypeError istisnası .
- Eğer thisArg sağlandı, let T olmak thisArg ; Başka let T olmak tanımsız .
- Let A be ArraySpeciesCreate ( O , len ).
- ReturnIfAbrupt ( A ).
- İzin Vermek k 0 olur.
- Tekrarlayın, k < len
- Let Pk (ToString olmak k ) olsun.
- KPresent'in HasProperty olmasına izin verin ( O , Pk ).
- ReturnIfAbrupt (ReturnIfAbrupt kPresent ).
- Eğer kPresent olduğunu doğrudur , sonra
- KValue olsun olsun ( O , Pk ).
- ReturnIfAbrupt (ReturnIfAbrupt kValue ).
- MappedValue Call to ( izin verilen çağrı olsun) ( callbackfn , T , « kValue , k , O »).
- ReturnIfAbrupt (ReturnIfAbrupt mappedValue ).
- Let durum CreateDataPropertyOrThrow (olmak A , Pk , mappedValue ).
- ReturnIfAbrupt ( durum ).
- K artır 1 .
- İade A .