【问题标题】:Class, Interface, Prototype, and else类、接口、原型等
【发布时间】:2013-09-01 02:11:43
【问题描述】:

我正在创建一个 JavaScript 框架,用于在经典的面向对象编程中制作应用程序(因此使用类/接口,而不仅仅是原型)。但是,我仍然无法为这些人命名。

例如:

var Bidule = function() { /*...*/ } ;
Bidule.prototype = { /*...*/ } ;

Bidule 是 OOP 类,因为类是构造函数吗?或者它只是一个 constructor ? 由于类没有原型,我认为它不能称为真正的类。

所以这意味着我应该称它们为“构造函数”。但是,接口或抽象类呢?如果它们不是构造函数,那么正确的词是什么?接口是一种类吗?

我在我的框架中设计了构造函数、类和接口。但是,我需要一个名称来重新组合所有主题,以便我们可以构建一个这样的主题:

var Bidule = new _NAME_.Class(/*...*/) ; // Where _NAME_ is the name of the container of class/function/interface.

我正在考虑“概念”,但我不确定,想知道您的意见。


我还将“可见性”命名为描述公共/私有类的常用词, 静态/抽象/接口/单例/最终类的“type”。这些是正确的吗?


最后一个问题:动词'extend'和'inherit'有区别吗?

提前感谢您的回答。

【问题讨论】:

    标签: class oop interface prototype


    【解决方案1】:

    Javascript 不是传统的 OO 语言,它是原型。由于这个原因,一些关于OO的概念不能应用于js。

    Bidule 是你的类型,所以它是你的“类”。构造函数是您关联到变量的函数

    var Bidule = function() { /*...*/ } ;
    Bidule.prototype = { /*...*/ } ;
    
    var obj = new Bidule();
    obj.foo = 'bar';
    
    var obj2 = new Bidule();
    obj2.foo = 'foo';
    
    alert(obj instanceof Bidule); // true
    alert(obj2 instanceof Bidule); // true
    alert(obj.foo); // bar
    alert(obj2.foo); // foo
    

    Javascript 不支持抽象类或接口,不,接口不是某种类。接口定义了契约,或什么你的类做了,但不指定如何

    在此上下文中扩展和继承具有相同的含义。

    【讨论】:

    • 感谢您的所有回答。那么如果Bidule 是一种类型,我应该如何调用“static/abstract/interface/singleton/final”?类的“属性”?
    • Final、static 和 abstract 是类的修饰符。接口是一个类在实现它时将签署的契约。单例是一种设计模式,它为整个应用程序提供对象的单个实例。
    • 没错,就是一键切换到这五个词之一。但是你回答了我的问题。 :) 再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多