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

Angular 1.4.8 / JS : create constructor and inherit properties into a 3rd object

本文关键字:对象 三个 属性继承 JS 构造函数 创建 Angular      更新时间:2023-09-26

DEV TOOLS

Angular 1.4.8&lodash

问题

编辑

澄清我的问题:

  1. 创建对象(文章)
  2. 应用构造函数
  3. 然后导入第三个对象的属性,但将其放置在proto文件夹,这样我就不会得到大量属性在根中

正如我所说,我的代码是有效的,但我问,因为我来自一个更结构化的语言背景,继承只是感觉脆弱和混乱,但也许这就是JS ES5。。。6看起来更好。

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

在以下示例中:

  1. 我通过注入数据和密钥来创建一个文章实例。然后我使用constructor工厂为创建构造函数CCD_ 2
  2. 然后我用3rd的属性扩展文章实例对象,模型(模型提供程序),但也希望将它们放在具有特定键"Eloquent"的__proto__文件夹中

示例:

Extendable
// Extendable constructor properties
__proto__: Extendable
    Eloquent: Object
      // 'Eloquent model' inherited properties

代码:

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

我不完全理解您在这里想要实现的目标。听起来您正在尝试创建新的对象,这些对象也将继承基本对象的属性,也可能继承第三个对象的属性。

假设您有一个基对象:base={foo:1}现在您有了另一个对象:third={third:1}现在,我们想要创建一个对象,它从基开始抑制,并且也从第三个开始具有属性。

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