javascript - 处理 API 设计和 OO 糖

标签 javascript api

入门读物:

按照上述模式,我创建如下库/API

var Proto = {
  constructor: function () {
    this.works = true;
  },
  method: function () {
    return this.works;
  }
};

现在库用户要与我的原型(prototype)(不提供工厂函数)交互,他们必须实例化和初始化对象

// instantiate
var p = Object.create(Proto);
// initialize
p.constructor();

这是一种强制用户实例化和初始化我的对象的不友好且冗长的方式。

我个人使用 pd 在我所有的应用程序中,我都有以下糖

// instantiate or initialize
var p = Proto.new();
// or without bolting onto Object.prototype
var p = pd.new(Proto);

但是我认为将 pd 强加给用户是不友善的,所以我不确定让我的库可用的最佳方法是什么。

  1. 人们创建了 Proto 的新实例并调用.constructor自己
  2. 强制人们使用pd
  3. .create样式工厂函数
  4. 放弃并使用new <Function>.prototype

1和2已经提到了。

3 基本上是

Proto.create = pd.new.bind(pd, Proto);

4 会让我难过,但确认以已知的标准做事方式会提高可用性。

通常,在使用非标准 OO 模式时,允许人们在他们的应用程序中使用我的库的最简单机制是什么?

我现在很想说

// here is my Prototype
Proto;
// here is how you instantiate a new instance
var p = Object.create(Proto);
// here is how you initialize it
// yes instantiation and initialization are seperate and should be.
p.constructor();
// Want sugar, use pd.new

最佳答案

目前,如果您使用一个小的 API 来帮助您构建传统的构造函数,使用看起来几乎像原型(prototype)作为类的语法,那么您可能会在您的库客户端上实现最简单的操作。 API 用法示例:

// Superclass
var Person = Class.extend({
    constructor: function (name) {
        this.name = name;
    },
    describe: function() {
        return "Person called "+this.name;
    }
});

// Subclass
var Worker = Person.extend({
    constructor: function (name, title) {
        Worker.super.constructor.call(this, name);
        this.title = title;
    },
    describe: function () {
        return Worker.super.describe.call(this)+" ("+this.title+")";
    }
});
var jane = new Worker("Jane", "CTO");

实现:

关于javascript - 处理 API 设计和 OO 糖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7835376/

相关文章:

javascript - 更改特定 DOM 元素的 src

Laravel Passport 密码授予 token : own mobile app

javascript - Google 自定义搜索 API 的客户端请求数量是否受到限制?

c# - 带有 API 的版本控制系统。需要获取指标

c# - Jwt 代码不适用于 .NET Core 2

javascript - 返回函数的 JS 类

javascript - 使基于 Canvas 滚动的图像序列动画更加流畅

Javascript 添加文本字段按钮无法正常工作

javascript - 如何从 Electron 的主进程访问相机

PHP 中的 JavaScript 无法正常工作