2012-11-27 16 views
5

Biz bunu iş yerinde JavaScript kütüphanesi göndermek için özel bir:__proto__ geçici çözüm 10

DOM.__proto__ = Library.prototype; 

hızla nasıl benzer kullanılabilir böylece DOM nesneleri iç işlevleri/özelliklerini aktarmak jQuery örneğin yapar.

Yeni bir proje için onu Internet Explorer için uygulamanız gerekiyor ancak maalesef __proto__ IE tarafından desteklenmiyor.

Bunun için herhangi bir fikir, geçici çözümler nelerdir? Gereksinim sadece IE10 (ama IE9 da iyi olurdu).

+0

İyi bir çözüm bulunması pek olası değildir. Sadece prototipini IE içinde değiştirebilir/yerine başka bir nesnenin prototipini/hijack/enjekte edebilir. – xiaoyi

+0

Tamam, ancak IE'de nasıl görünecek? – user1768759

cevap

1

DOM öğesini doğrudan olduğu gibi genişletmek yerine API'nızla paketleyebilirsiniz;

// Wrapping Constructor 
function Library(element) { 
    this.element = element; 
} 

// Whatever it is your library does 
Library.prototype = { 
    // some example method 
    html: function(markup) { 
    // refer to "this.element" instead of "this" 
    this.element.innerHTML = markup; 
    } 
}; 

// example 
var wrappedElement = new Library(document.getElementById('unique')); 

// refer to the API rather than the Element directly 
wrappedElement.html('<span>Hello World</span>'); 

Ayrıca safely subclassing Array with this technique tarafından Kitaplığı biraz daha uzatabilir.

Bu yardımcı olur umarım, teşekkürler.

0

Ne uzatmakla ilgili:

$.extend(Element.constructor.prototype, Library.prototype); 

DÜZENLEME: nedeniyle halkın isyanına, ben extend 2014 Şunları yılında JS programlama bağlamında bir çok tanıdık bir kavram olduğuna dikkat edeceğiz Ne olduğunu ve nasıl çalıştığını çevrimiçi çok sayıda örnek bulmak ve projenizde zaten kullandığınız en az bir kütüphane (JQuery, Lo-Dash/Underscore, AngularJS, Ember.js ...) oldukça iyi bir şans var

+0

'jQuery' sorgusunda söz konusu olsa bile, hala jQuery ile ilgili değil, genel olarak' $ .extend 'in jQuery kütüphanesinin bir parçası olduğunu belirtmelisiniz. Bu her okuyucu için açık olmayabilir. –

+1

@ t.niese Son on yıldır bir mağarada yaşayan biri olmadıkça, jQuery’nin '$' olduğunu bildiğine inanıyorum. –

+1

@torazaburo hala js, jQuery, ... ve burada birbirinden ayırt edemeyen yeterli insanlar var ve bu yüzden insanlar bir '$' olduğunda jQuery kullandıklarını bilmediklerini gösteren yeterli soru var. Ayrıca '$' jQuery'ye ayrılmaz. Halen belediye başkanlığı kütüphanesi olmasına rağmen, gelecekte kütüphane olması gerekmemektedir. Bu yüzden ya jQuery.extend() 'yazmayı ya da jQuery'den bunun iyi bir şey olacağını söylemeyi düşünüyorum. –

2

0 oluşturduktan sonra __proto__'a atamak yerinenesnesi, (MSDN, IE9'dan beri desteklenir) için nesnesini doğru prototiple oluşturun ve sonra da özellikleri atayın.

var DOM = Object.create(Library.prototype);

mevcut (ve belki de yabancı) nesnelerin prototipi değiştirmek istiyorsa

var DOM = {}; 
DOM.__proto__ = Library.prototype;

, sadece bunu önlemek. Zaten kötü bir uygulama.