首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原生Javascript类实现

原生Javascript类实现
EN

Stack Overflow用户
提问于 2010-08-06 02:20:23
回答 4查看 1.6K关注 0票数 2

目前我正在参与一个web应用程序项目,我们不会使用框架。

我正在寻找“最好的”javascript继承实现。我已经使用过原型样式类,如下所示:

代码语言:javascript
复制
function animal(options) {
    self = this;

    //properties    
    this.name = options.name;

    //events

    this.onXYZ = options.onXYZ;

    //event handlers
    this.handlerOfEvent = function() {
        //do something using 'self' as the 'this' variable
    }
}

animal.prototype.aFunction = function() 
{
     //do something 
}

等。

我没有在没有框架的情况下使用继承(通常使用Mootools),但我确实在一定程度上理解了它在Javascript中的工作原理,并看到了相当多的实现。

我想得到一些关于在哪里可以找到最好的实现的反馈,一种不会摆弄任何本机类型并允许我完全访问优势类的属性和函数的实现。

如果有任何建议,我们将非常感谢。

非常感谢您的宝贵时间。

EN

回答 4

Stack Overflow用户

发布于 2010-08-06 03:58:04

道格拉斯·克罗克福德( Douglas Crockford )描述了一种我最近一直偏爱的方法:

代码语言:javascript
复制
var rectangle = function(width, height)
{
    var h = height, w = width;
    var scale = function(s)
    {
        h = h * s;
        w = w * s;
    }

    return { scale: scale };
}

var square = function(width)
{
    var o = rectangle(width, width)
    // Add things to o, if needed
    return o;
}

这不是一个非常好的例子,因为没有任何东西真正被扩展,但它应该能让人理解这个想法。要实例化这些对象,只需使用以下命令:

代码语言:javascript
复制
var newRectangle = rectangle(3, 4);  // 3 by 4 rectangle
var newSquare = square(6);  // 6 by 6 square
票数 1
EN

Stack Overflow用户

发布于 2013-07-22 11:49:52

在过去,我尝试了很多方法。我最喜欢John Resig的实现方式。这很简单。您可以从http://ejohn.org/blog/simple-javascript-inheritance/查看完整的示例和javascript文件(大约只有25行代码

为了完成答案,您可以在包含他的代码之后实现一个这样的类。

代码语言:javascript
复制
var Person = Class.extend({
    name : '',
    init : function (name) {
        this.name = name;
    },
    say : function () {
        alert("I'm " + this.name);
    }
});

var mick = new Person("Mick");
mick.say();
票数 0
EN

Stack Overflow用户

发布于 2014-01-27 20:39:30

看看Simple Javascript Class Project (常量、属性、受保护、静态、utils等等)、Simple JavaScript InheritanceInheritance Patterns in JavaScript

简单的Javascript类(sjsClass)示例

代码语言:javascript
复制
Class.extend('Foo', {
    __protected : {
        privV : 123,
        privF : function () {
            return this.privV + this.priv3;
        }
    },
    'protected priv3' : 'Protected Value',
    setX : function (x) {
        this.privV = x;
    },
    test : function () { return this.privF(); }
});
var f = new Foo;
f.setX(456);
f.test(); // -> 'Protected Value456'
f.privF(); // -> Error
f.privV; // -> undefined
f.priv3; // -> undefined
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3417843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档