小编Ron*_*ist的帖子

使用$ .extend和模块模式的简单javascript继承

我想知道几年后人们会想到使用模块模式 - esque构造函数模式继承并且没有正常的原型继承.为什么程序员不使用模块模式用于非单例js类?对我来说,优点是:

  • 非常清晰的公共和私人范围(易于理解代码和API)
  • 无需在回调中通过$ .proxy(fn,this)跟踪'this'指针
  • 不再使用事件处理程序等等= =等等.每当我看到'this'时,我知道它是被传递给回调的上下文,它不是我跟踪以了解我的对象实例的东西.

缺点:

  • 小性能退化
  • 道格·克罗克福德可能有"手指摇摆"的风险吗?

考虑一下(只需在任何js控制台中运行)

var Animal = function () {
    var publicApi = {
        Name: 'Generic',
        IsAnimal: true,
        AnimalHello: animalHello,
        GetHelloCount:getHelloCount
    };

    var helloCount = 0;

    function animalHello() {
        helloCount++;
        console.log(publicApi.Name + ' says hello (animalHello)');
    }

    function getHelloCount(callback) {
        callback.call(helloCount);
    }

    return publicApi;
};

var Sheep = function (name) {
    var publicApi = {
        Name: name || 'Woolie',
        IsSheep: true,
        SheepHello: sheepHello
    };

    function sheepHello() {
        publicApi.AnimalHello();
        publicApi.GetHelloCount(function() {
            console.log('i (' …
Run Code Online (Sandbox Code Playgroud)

javascript jquery inheritance module

20
推荐指数
1
解决办法
2万
查看次数

标签 统计

inheritance ×1

javascript ×1

jquery ×1

module ×1