DEV工具
Angular 1.4.8& lodash
问题
修改
澄清我的问题:
正如我所说的我的代码有效,但我问我来自一个更结构化的语言背景,继承只是感觉脆弱和混乱,但也许这是JS ES5 ... 6看起来更好。
下面的代码有效,但由于我是JS的新手,我想知道是否有更好的方法来构建一个对象(“类”),我从传入的数据/键创建一个consctrutor然后扩展我的当前在proto文件夹的section /文件夹中具有第3个对象属性的对象?构建构造并继承属性的Extendable()
函数感觉很难看。
在下面的例子中:
articleModel
。__proto__
文件夹中,并带有“Eloquent”的特定键。示例:
Extendable
// Extendable constructor properties
__proto__: Extendable
Eloquent: Object
// 'Eloquent model' inherited properties
CODE:
(function() {
'use strict';
_Constructor.$inject = [];
function _Constructor() {
function __constructor(data, keys) {
_.assign(this, _.pick(data, keys));
}
return __constructor;
}
ArticleModel.$inject = ['model', '_Constructor'];
function ArticleModel(model, _Constructor) {
function Extendable(data, keys) {
_Constructor.call(this, data, keys);
// This works but NOT pretty. Is there a cleaner or better way to decorate / inherit e.g. is there a ::__parent() method?
var decorate = Extendable.prototype['Eloquent'] = {};
// model is a the main model provider
_.assign(decorate, model);
}
Extendable.prototype = Object.create(_Constructor.prototype);
Extendable.prototype.constructor = Extendable;
var article = Extendable.prototype;
article.pleaseWork = function() {
return 'The JS gods are pleased! move forward 1 test!';
};
return Extendable;
}
angular.module('article', [
])
.factory('_Constructor', _Constructor)
.service('article', ArticleModel)
})();
答案 0 :(得分:2)
我不完全明白你在这里想要达到的目标。听起来您正在尝试创建新对象,这些对象也将从基础对象继承属性,并可能从第3个对象继承属性。
让我们假设你有一个基础对象:base = {foo:1} 现在你有了另一个对象:third = {third:1} 现在我们要创建一个从base开始的对象,并且还具有第三个属性。
var newGuyOnTheBlock = Object.create(base); //creates a new object from base and will have all properties from base
_.extend(newGuyOnTheBlock, third); // now it'll have properties from third and base