JS __proto__ "eğlenceli" bir gerçek
Beni yeterince uzun süredir takip ettiyseniz __proto__, her zaman ne kadar karşı olduğumu zaten biliyorsunuz ve yine de, uzun bir süre önce ECMAScript standardına geçtiğinden beri , en azından bir nesneyi işaretlemek için kullanımını kabul edilebilir bulduğum nadir durumlar var. :
const factory = (fields, {prototype} = Object) => ({
__proto__: prototype,
...fields
});
// mimic an <a /> reference
factory({href: '/'}, HTMLAnchorElement);
Performansı bir kenara bırakırsak ve lütfen dikkat edin __proto__, vahşi doğada kullanımını hiç önermiyorum, bu gönderi başka nedenlerle var.
Object.prototype.__proto__
Herkesin __proto__ erişimcisinin ne yaptığını bildiğinden oldukça eminim , bu yüzden size bir meydan okuma önermek istiyorum… ve evet, bunların hepsi geçerli JS:
class Test {}
const __proto__ = Test.prototype;
// what do these operations return?
({__proto__} instanceof Test);
({__proto__: __proto__} instanceof Test);
({"__proto__": __proto__} instanceof Test);
({["__proto__"]: __proto__} instanceof Test);
// what do these operations return?
({__proto__}.__proto__ === Test.prototype);
({__proto__: __proto__}.__proto__ === Test.prototype);
({"__proto__": __proto__}.__proto__ === Test.prototype);
({["__proto__"]: __proto__}.__proto__ === Test.prototype);
Cevabı öğrenmek için kendinize bu parçacıkları çalıştırmadıysanız, bu konuda yardımcı olabilirim! İlk meydan okumada, çıktı yine , ve olacaktır ve falsebunun nedeni , her ikisinin de own property olarak tanımlanmasıdır , oysa sözdizimi yoluyla atama, özel sözdizimi özellikleri kullanılmadan, etrafında tırnak işaretleri olsa bile fiilen erişimciden geçer.truetruefalse{__proto__}{["__proto__"]}Object.prototype.__proto__
Öte yandan, ikinci meydan okumada (all ) doğrudan veya as olarak trueerişmemiz gerçekten önemli değil , bu nedenle temelde ayarlayıcıyı tetikleme biçimimizden alıcıyı bir kez tetikleyebilme biçimimizde sıfır simetri vardır. ya kendi mülküdür ya da sihirli bir miras kapısıdır.__proto__["__proto__"]__proto____proto__
… ve sadece __proto__ değil
Kendimi kontrol etmedim, ancak her eski __xxx__özel erişimcinin aynı __proto__lanetten muzdarip olduğuna inanıyorum, bu nedenle, denerseniz işler kolayca çıldırabileceğinden, özellikleri gerçek amacınız ve beklentilerinizle atamak için en yeni JS sözdizimini karıştırırken lütfen dikkatli olun. bu özellikleri atamada akıllı olun .
Ve hepsi bu millet!
Bu gönderiden alınacak tek çıkarım muhtemelen şu şekilde özetlenebilir:
- bugün veya yarın, bunların yeni sözdizimiyle nasıl davrandığına dair sürprizlerden kaçınmak istiyorsanız, dilin eski ama işleyen kısımlarını kullanmayın.
- bir nesnenin prototipini manuel olarak ayarlamak kesinlikle gerekli olduğunda açık (ve ne yazık ki daha yavaş) tercih
Object.setPrototypeOfedin, ancak mümkün olduğunda diğer her durumda sınıfları kullanın - bu gönderiyi hafızanızdan silin veya " Kodlarımda asla kullanmamalıyım " gibi kısa bir cümleye sıkıştırın ve beyninizi veya duygularınızı karıştırmayan yeni ve süslü şeyler öğrenerek ilerleyin.
__proto__

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































