У меня есть следующий код для мини-рамки. Как сделать «пуленепробиваемый» мой код, чтобы потенциальный делинквент-разработчик не нарушил его? Я кратко, что делает этот код в комментариях, и вот a demo for clarificationСпособы предотвращения перезаписи внутренних функций
var kit = (function() {
'use strict';
//internal cache
var internal = {
core: {}
}
//external interface for extensions
//let's say we provide a hook for error handling from the core
var external = {
core: {
error: {
addListener: function(callback) {
callback();
}
}
}
}
//externally available options
var core = {
//build extension by creating an instance of the passed function
//providing it the core interface, and
//then store the instance in the cache
extend: function(extensionName, extensionDefinition) {
var newExtension = new extensionDefinition(external.core)
internal.core[extensionName] = newExtension;
}
};
//expose
return {
core: {
extend: core.extend
},
_internal: internal,
_external: external
}
}());
//let's say two developers built these extensions
//developer1 builds his code
kit.core.extend('extension1', function(core) {
core.error.addListener(function() {
alert('test');
})
//developer1 intentionally kills the whole error interface
core.error = null;
});
//now, the other scripts cannot use the error interface
//because some delinquent developer killed it
kit.core.extend('extension2', function(core) {
//core.error is no more!
core.error.addListener(function() {
alert('test');
})
});
как я делаю это так, что каждое расширение не имеет изолированную «копия» из core
внешних функций, так что независимо от того, что они делают это, то не влияет на другие расширения?
Вопрос, если я могу добавить: есть ли лучший способ/подход к структурированию этого кода?
Вообще говоря, вы не можете «пуленепробиваемый» JavaScript. Язык слишком разрешительный. Даже встроенные функции, предоставляемые браузером ('alert()', 'parseInt()' и т. Д.), Могут быть произвольно заменены. Как правило, лучшее, что вы можете сделать, - это обфускацию кода перед его развертыванием. – aroth
@ я знаю, что нет кевлара, достаточно толстого, чтобы предотвратить его. но я хотел бы знать, есть ли лучший способ изолировать поломку. – Joseph