场景1 – 一切正常:
var AwesomeObject = function()
{
   var self = this;
   self.whatstuff = 'really awesome';
}

AwesomeObject.prototype.doStuff = function()
{
   var self = this;
   console.log('i did '+self.whatstuff+' stuff');
   return self;
}

var awesome = new AwesomeObject(); //returns a new AwesomeObject
awesome.doStuff(); // prints 'i did really awesome stuff' on the console

现在我甚至想要它甚至是美妙的:

var AwesomeObject = function()
{  
   var f = function() { console.log('i am awesome'); }
   var self = f;
   self.whatstuff = 'really awesome';
   return self;
}

AwesomeObject.prototype.doStuff = function()
{
   var self = this;
   console.log('i did '+self.whatstuff+' stuff');
   return self;
}

var awesome = new AwesomeObject(); //returns the interal f object
awesome(); // prints 'i am awesome'
awesome.doStuff(); // throws an error

新的AwesomeObject本身应该返回一个可执行函数,这样我就可以说’awesome();’

但我希望它继承AwesomeObject.prototype.

添加self.prototype = AwesomeObject.prototype;没有帮助.

var AwesomeObject = function()
{  
   var f = function() { console.log('i am awesome'); }
   var self = f;
   self.whatstuff = 'really awesome';
   self.prototype =  AwesomeObject.prototype;
   return self;
}

好吧,我可以将AwesomeObject.prototype函数 – 一个接一个地 – 复制到f的范围内

var AwesomeObject = function()
{  
   var f = function() { console.log('i am awesome'); }
   var self = f;
   self.whatstuff = 'really awesome';
   self.doStuff =  function() { AwesomeObject.prototype.doStuff.apply(self,arguments); }
   return self;
}

但我认为必须有更好的方式,更好的模式,它是什么?

这个问题让我发疯,帮助真的很感激.

一般来说:如何创建一个函数对象

>可以用new创建
>返回可以执行的函数对象
>继承给定原型的所有属性和方法

有办法吗?

谢谢
弗朗茨

解决方法

一个非常简单的模式是工厂.
var AwesomeObject = (function() {
    var AwesomeObject = function() {
        this.whatstuff = 'really awesome';
    };

    AwesomeObject.prototype.doStuff = function() {
        console.log('i did ' + this.whatstuff + ' stuff');
        return this;
    };

    return function() {
        var o = new AwesomeObject();
        var f = function() { console.log("I am awesome"); };
        for (var k in o) {
            f[k] = o[k];    
        }

        return f;
    };

})();

var foo = AwesomeObject();
foo();
foo.doStuff();

Live Example.

我们的想法是将您的功能和对象分成两部分.您的对象存在于函数的本地范围内,该函数可以使用该对象.

对象本身完全通过原型继承.

关键是将对象的所有属性/方法转发到函数上.

这是最干净的解决方案.

javascript – 需要的模式:创建返回可执行函数并从原型继承的新对象的更多相关文章

  1. Swift设计模式之原型模式

    转自Swift设计模式原文Design-Patterns-In-Swift

  2. swift设计模式学习 - 原型模式

    原型模式的基本实现上图是最基本的原型模式的结构图,下面将用Swift代码来实现一个基本原型模式:不知道大家有没哟发现,这个设计模式我们在代码中经常会用到,那就是NScopying协议,通过这个协议来实现对象的深拷贝,下面我们就用NScopying来实现一下。原型模式解决实际问题上面是通过NScopying来实现原型模式的例子,一下是使用过程:以下是打印的结果:以上是我对于原型模式的理解,如果有不对的地方欢迎大家交流,最后谢谢大家的阅读~~

  3. swift-原型模式

    GoF提出了23种设计模式,本系列将使用Swift语言来实现这些设计模式。概述通过复制一个已存在的对象来获得一个新的相同类型的对象被称作原型模式,在复制的过程中不需要关心被复制对象实现的接口或者类型。,pet:Pet))}简单形式拷贝通过声明一个cloning协议来为需求方提供完全拷贝的方案123456789101112131415161718protocolcloning{funcclone()->AnyObject}classpet:NSObject,cloning{funcclone()->AnyO

  4. 深入了解js原型模式

    在js中,创建对象的方式有工厂模式和构造函数模式等,但是,构造函数中的每个方法都需要在实例对象中重新创建一遍,不能复用,就需要使用原型模式来创建对象。下面我们来了解一下吧

  5. PHP设计模式(四)原型模式Prototype实例详解【创建型】

    这篇文章主要介绍了PHP设计模式:原型模式Prototype,结合实例形式详细分析了PHP原型模式Prototype的基本概念、功能、原理、实现方法与操作注意事项,需要的朋友可以参考下

  6. PHP设计模式之原型模式示例详解

    这篇文章主要给大家介绍了关于PHP设计模式之原型模式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  7. 深入理解JavaScript系列(42):设计模式之原型模式详解

    这篇文章主要介绍了深入理解JavaScript系列(42):设计模式之原型模式详解,原型模式(prototype)是指用原型实例指向创建对象的种类,并且通过拷贝这些原型创建新的对象,需要的朋友可以参考下

  8. Android常用设计模式之原型模式详解

    这篇文章主要为大家介绍了Android常用设计模式之原型模式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  9. php设计模式之原型模式分析【星际争霸游戏案例】

    这篇文章主要介绍了php设计模式之原型模式,结合星际争霸游戏案例形式分析了PHP原型模式的原理、使用方法与操作注意事项,需要的朋友可以参考下

  10. 一文带你了解Java设计模式之原型模式

    原型模式其实就是从一个对象在创建另外一个可定制的对象,不需要知道任何创建的细节。本文就来通过示例为大家详细聊聊原型模式,需要的可以参考一下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部