2012-07-01 36 views
7

Görünüşe göre __proto__ özelliği, standartlarla uyumlu olmasa da ve IE bunu desteklemese de prototip zincirlerini işlemenin ana yoludur. Ayrıca new yapıcı kullanımı yoluyla devralma inşa edebilirsiniz rağmen bu __proto__ özellik veya standartlara uyumlu Object.getPrototypeOf işlevine göre gereksiz bir komplikasyon gibi görünüyor.Neden ECMAScript standardında Object.setPrototypeOf (...) yok?

Düzenleme: cevapları belirtildiği üzere

, bu yöntem artık (ES6 standart) mevcut. olsa da, performans uyarı farkında olun: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf

+5

iyi haberler. Object.setPrototypeOf() ES6'ya girmiş görünüyor http://webreflection.blogspot.pt/2013/05/objectsetprototypeofo-proto-is-in-es6.html – banzomaikaka

cevap

7

O ES6 uyum taslak bir parçasıdır.

2

Brendan Eich bu here diyor ki:

Object.setPrototypeOf ne olacak değildir. Yazılabilir __proto__, uygulamak için devasa bir acıdır (çevrim-kontrol etmek için serileştirilmelidir) ve her çeşit karışıklık tehlikesi yaratır. alt seviye keskin alet olarak istediğinizi düşünebilirsiniz. JS bu dil değil. Sınıflar ve karıĢımlar için daha yüksek düzeyli formları daha iyi görünür ve bu tür keskin kenarları içermez.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf

Ben Chrome'un son sürümünde artık onu kullanıyorum:

+0

Cevabınız için teşekkürler, itiraf etmeliyim ki tamamen anla. Fikriniz Javascript'te prototip olmayan temel kalıtım eklemek mi? Aklımda Object.setPrototypeOf sadece prototip nesne referansı oluşturacaktı, bu yüzden bunun nasıl serileştirme gerektireceğini anlamıyorum. o yanlış :) Chrome'da var sadece gibi – JussiR

+6

görünüyor: https://code.google.com/p/v8/source/detail?r=18685 ve, zaten Firefox'ta deneysel var: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf – lucasarruda

+0

@Esailija 2017'de bunun hakkındaki düşünceleriniz nelerdir? Performans ve optimizasyon (yazdığınız/katkıda bulunduğunuz libs) için "ciddi" görünüyorsunuz, bu yüzden ne düşündüğünüzü bilmek isterim. –