Этот метод не является оригинальным автором. Я просто суммировал это на основе предшественников и придумал краткий и практичный метод наследования JavaScript.
Традиционный JavaScript наследует прототипы цепочки на основе прототипов и требует много новых операций. Код не достаточно краткий, читаемость не очень сильная, и, похоже, он легко загрязнен прототипами цепями.
Метод наследования, обобщенный автором, является кратким и ясным. Хотя это не лучший способ, я надеюсь, что это может вдохновить читателей.
Хорошо, не говорите много чушь, просто посмотрите на код, комментарии подробно описаны, вы можете понять его на первый взгляд ~~~
Кода -копия выглядит следующим образом:
/**
* Создан Ян Юанон 14-11-11.
* Не используйте прототип для реализации наследования
*
*/
/**
* Копирование объекта Javascript, копирование только одного слоя и только копирование атрибутов функции, а не универсальные!
* @param obj объект для копирования
* @returns объект
*/
Object.prototype.clone = function () {
var _s = это,
newobj = {};
_s.each (function (key, value) {
if (object.prototype.tostring.call (value) === "[object function]") {
newobj [key] = value;
}
});
вернуть Newobj;
};
/**
* Выражать через все свои собственные свойства
*
* @param обратный обратный вызов. Обратный вызов будет содержать два параметра: имя атрибута ключа и значение атрибута значения
*/
Object.prototype.each = function (обратный вызов) {
var key = "",
_ Это = это;
для (ключ в _this) {
if (object.prototype.hashownproperty.call (_this, key)) {
обратный вызов (ключ, _ Это [ключ]);
}
}
};
/**
* Создать подклассы
* @param ext obj, содержит методы, которые необходимо переписать или расширить.
* @returns объект
*/
Object.prototype.extend = function (ext) {
var Child = this.clone ();
ext.each (function (key, value) {
ребенок [ключ] = значение;
});
Возвращение ребенка;
};
/**
* Создать объект (экземпляр)
* @param аргументы могут принять любое количество параметров в качестве списка параметров конструктора
* @returns объект
*/
Object.prototype.create = function () {
var obj = this.clone ();
if (obj.construct) {
obj.construct.apply (obj, аргументы);
}
вернуть OBJ;
};
/**
* Пример использования
* Используйте этот метод, чтобы наследовать, избегая утомительного прототипа и нового.
* Однако пример, который я написал, может только унаследовать функцию родительского класса (может быть понят как метод члена).
* Если вы хотите наследовать более богатый контент, пожалуйста, улучшите метод клона.
*
*
*/
/**
* Животные (родитель)
* @type {{construct: construct, eat: eat}}
*/
var Animal = {
Construct: function (name) {
this.name = name;
},
есть: function () {
console.log («Меня зовут»+this.name+». Я могу есть!»);
}
};
/**
* Птица (подкласс)
* Птицы переопределили метод питания родительского класса и расширяют метод мухи
* @type {subclass | void}
*/
var bird = Animal.Extend ({
Ешь: функция (еда) {
console.log («Мое имя»+this.name+». Я могу есть»+еда+»!»);
},
Fly: function () {
console.log («Я могу летать!»);
}
});
/**
* Создать экземпляр птицы
* @Type {Jim}
*/
var birdjim = bird.create ("jim"),
birdtom = bird.create ("Том");
Birdjim.eat ("червь"); // Меня зовут Джим. Я могу съесть червя!
birdjim.fly (); //Я могу летать!
birdtom.eat ("рис"); //Меня зовут Том. Я могу есть рис!
birdtom.fly (); //Я могу летать!