我一直在观看这段视频 ,其中达米安(Damian)说克罗克福德(Crockford)称之为:“超级构造器模式”

代码示例:(来自视频)

var signalR;

signalR = function (url){
 return new signalR.prototype.init(url);
}

signalR.prototype={
 init:function(url)
 {
   this.url=url;
 } 
}

signalR.prototype.init.prototype = signalR.prototype;

现在,我已经搜索了有关Crockford和超级构造函数的信息, 我只能找到Object.create的实现:

我明白的很清楚:(也是陷阱)

function create(o)
{
 function f(){};
 f.prototype=o;
 return new f();
}

但是我仍然不知道它是如何关联的:

题 :

  • 究竟是什么(在视频中)-他尝试使用这种模式来解决吗? (同样,小代码示例将不胜感激)。

===============>>#1 票数:3 已采纳

让我们看一下带有构造函数和原型的普通类

//-------------------
//---- Class signalr
//-------------------

//-- constructor
var signalr=function () {}

//--prototype
signalr.prototype.init=function (url)
    {
    this.url=url;
    }

signalr.prototype.test=function () {alert ("test");}

//-------------------
//---- Class signalr -- END
//-------------------

因此,要生成此类的新实例,我们必须编写以下内容。

var con=new signalr ();  //--- con would inherit two methods init and test
con.init ("yoururl");

让我们看一下克罗克福德

//-------------------
//---- Class signalr - Crockford 
//-------------------

//-- signalr is here not the constructor, it's a normal function with a return value and setted prototype, the constructor becomes init which is defined in the signalr prototype
var signalr=function (url) 
    {
    return new signalr.prototype.init (url);
    }

//--prototype
//-----------

   //-- constructor
signalr.prototype.init=function (url)
    {
    this.url=url;
    }

signalr.prototype.test=function () {alert ("test");}
signalr.prototype.init.prototype=signalr.prototype       //- with this line, the prototype of the init method which is the constructor of our instances is linked to the prototype signalR so all instances would inherit the properties and methods defined in the signalR prototype

//-------------------
//---- Class signalr -- END
//-------------------

因此,要生成此类的新实例,我们可以简短地编写以下代码,以实现与上述相同的效果。

var con=signalr ("yourURL");                //--- con inherits all the methods and properties of signalr.prototype with one line

似乎crockford懒于编写台词,我在考虑实用的示例。 但我认为整个过程并不令人兴奋

  ask by Royi Namir translate from so

未解决问题?本站智能推荐:

1回复

jQuery对象实际上只是“增强”的初始化构造函数

嗨,我将SignalR与ASP.Net Webforms一起使用。 对于普通页面,它的工作正常。 但是对于母版页继承的页面,在行 $.connection是未定义的。 关键是,当我看到$ ,它表明“ jquery对象实际上只是init构造函数的'enhanced'”,我无法理解。
1回复

从模式弹出窗口调用SignalR Javascript函数

我的DiaryHub.vb具有以下内容: 我的主目录/索引窗口具有以下代码来启动/配置SignalR。 该代码有效,并且在启动时会显示标题日记条目。 我还有一个按钮可以打开剑道窗口作为模态,并带有使用此功能添加新日记条目的表单: 然后,我的AddDiaryEntry
1回复

Signalr:如何调用名称在运行时定义的javascript函数

我已经用谷歌搜索了,但是找不到任何相关的东西。 我想在信号器中调用JavaScript函数,其名称在运行时定义。 通常一个函数调用看起来像这样 我想知道是否可能出现以下情况: 可以在以下堆栈溢出文章中找到答案: 如何从IHubContext调用动态选择的SignalR客户端方
4回复

从Promise访问“ this”之外的JavaScript

我什至不知道该怎么表达我的问题,在我完全搞清楚之前,这是我的代码: 如您所见,我需要调用process对返回的数据进行操作,并且我不想使用为它定义的变量,我想使用this ,并且我猜这是不可能的,是否有更好的方法可以实现我的目标? 谢谢
2回复

SignalR抛出JavaScript错误

我是Signalr的新手。 我已经开箱即用地启动了MVC 4.0应用程序,并在Index View上连接了我的Signalr JavaScript。 当我单击“注册”或“登录”按钮时,signaler会引发JavaScript错误。 任何建议表示赞赏。 编辑: 这是我的代
2回复

Javascript方法未定义

我在javascript中对OOP很新,这是我的外部js文件。 这就是我如何称呼我的方法 当我试图调用trackUser方法时,我得到的trackUser未定义 哪里我做错了? 提前致谢
3回复

SignalR JavaScript未连接

我对JavaScript很新。 我正在尝试在JavaScript中实现一个简单的SignalR服务器回调。 首先是_Layout.cshtml 接下来,我的Index.html 我在顶部看到“HELLO WORLD”控制台日志,但我没有看到“已连接”或“无法连接”的控制台
2回复

SignalR中的Javascript语法

学习SignalR时,我会在自动生成的中心脚本中看到如下所示的JS脚本模式。 这是什么语法? 或在中心:
1回复

Javascript中的错误导致IE中的页面停止运行JavaScript

在我的网站上,我有一个对javascript文件的引用,在IE上,抛出此错误: 该throw被Internet Explorer捕获,并且似乎停止了任何其他JavaScript的运行。 我该怎么做才能使错误不会完全停止页面上的所有内容?
2回复

SignalR连接后JavaScript无法运行

我第一次使用SignalR以及mdb charts 。 我正在使用警报来证明SignalR正在运行,并且可以成功获取我的数据。 我尝试添加一些示例图表代码,但它只是不显示图形。 使用click函数调用时,该代码可以正常工作。 我当时认为这可能是时间问题,因为当前更新来自OnGet