Angular 1.4.8 / JS:创建构造函数并将属性继承到第3个对象

时间:2016-01-02 04:20:31

标签: javascript angularjs

DEV工具

Angular 1.4.8& lodash

问题

修改

澄清我的问题:

  1. 创建一个对象(文章)
  2. 应用构造函数
  3. 然后导入第三个对象的属性,但将其放入 proto文件夹所以我最终没有大量的属性 在根
  4. 正如我所说的我的代码有效,但我问我来自一个更结构化的语言背景,继承只是感觉脆弱和混乱,但也许这是JS ES5 ... 6看起来更好。

    下面的代码有效,但由于我是JS的新手,我想知道是否有更好的方法来构建一个对象(“类”),我从传入的数据/键创建一个consctrutor然后扩展我的当前在proto文件夹的section /文件夹中具有第3个对象属性的对象?构建构造并继承属性的Extendable()函数感觉很难看。

    在下面的例子中:

    1. 我通过注入数据和密钥来创建一个文章实例。然后我 使用_constructor工厂为其创建构造函数 articleModel
    2. 然后我使用3rd的属性扩展了文章实例 对象,模型(模型提供者),但也希望将它们放在__proto__文件夹中,并带有“Eloquent”的特定键。
    3. 示例:

      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)
      
          })();
      

1 个答案:

答案 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