Вопрос из трех частей:
Есть ли смысл добавлять второй уровень абстракции и использовать функцию получения/установки прототипа для вызова функций получения/установки привилегированного конструктора? См.
ns.Wheel.prototype.getWeight2()
иns.Wheel.prototype.setWeight2()
ниже.Вызов
swiss.getWeight()
вызывает методthis.getWeight()
в конструкторе. Любой способ переместиться на один уровень вверх по цепочке прототипов, чтобы вместо этого вызватьns.Wheel.prototype.getWeight()
?Любое значение для «скрытия» функций получения/установки прототипа «позади» конструктора получения/установки? Например,
ns.Wheel.prototype.getWeight()
"спрятан" за методомthis.getWeight()
в конструкторе.
Также обратите внимание, как геттер/сеттер прототипа добавляет единицу измерения для граммов; т. е. единица «г». Например, this.getWeight
возвращает 1000, а ns.Wheel.prototype.getWeight
возвращает 1000 г.
В этом примере используются колеса швейцарского сыра.
(function(ns) {
ns.Wheel = function() {
var _weight = 1000; // weight of cheese wheel. Private variable.
this.getWeight = function() { return _weight } // privileged weight getter
this.setWeight = function(weight) { return _weight = weight } // privileged weight setter
}
ns.Wheel.prototype.getWeight = function() { return this.getWeight()+'g' }
ns.Wheel.prototype.setWeight = function(weight) { return this.setWeight(weight)+'g' }
ns.Wheel.prototype.getWeight2 = function() { return this.getWeight()+'g' }
ns.Wheel.prototype.setWeight2 = function(weight) { return this.setWeight(weight)+'g' }
})(window.cheese = window.cheese || {}); // immediate function namespacing technique
var swiss = new cheese.Wheel();
console.log(swiss.getWeight()); //-> 1000. Invokes constructor method
console.log(swiss.setWeight(2000)); //-> 2000. Invokes constructor method
console.log(swiss._weight); //-> undefined. Private variable!!!
console.log(swiss.getWeight2()); //-> 2000g. Invokes prototype method.
console.log(swiss.setWeight2(9000)); //->9000g. Invokes prototype method.
prototype.js
и его действительно хорошее поведение наследования используяClass.create
и$super()
для ваших целей. А теперь побейте меня камнями за реанимацию такой злой старой библиотеки, друзья! ;) - person RienNeVaPlu͢s   schedule 17.12.2013_somePrivate
- person HMR   schedule 17.12.2013