在JavaScript中,我想创建一个对象实例(通过new
运算符),但是将任意数量的参数传递给构造函数.这可能吗?
我想做的是这样的事情(但下面的代码不起作用):
function Something(){
// init stuff
}
function createSomething(){
return new Something.apply(null, arguments);
}
var s = createSomething(a,b,c); // 's' is an instance of Something
Run Code Online (Sandbox Code Playgroud)
答案
从这里的回复中可以清楚地看出,没有内置的方式.apply()
与new
运营商通话.然而,人们提出了一些非常有趣的解决方案.
我首选的解决方案是Matthew Crumley的这个解决方案(我已将其修改为通过该arguments
属性):
var createSomething = (function() {
function F(args) {
return Something.apply(this, args);
}
F.prototype = Something.prototype;
return function() {
return new F(arguments);
}
})();
Run Code Online (Sandbox Code Playgroud) 我似乎无法在Visual Studio 2010中找到JavaScriptSerializer
对象和System.Web.Script.Serialization
命名空间.我需要将某些内容序列化为JSON我应该使用什么?
是的,我已经System.Web.Extensions
在项目中包含了(在System.Web.Extensions.dll中).这让我感到震惊的原因是什么?
System.Web.Extensions
被标记为过时我对claims
in 的使用完全不熟悉,ASP.NETIdentity
并希望了解使用中的最佳实践Roles and/or Claims
.
经过这一切阅读后,我仍然有类似的问题......
问:我们不再使用角色吗?
问:如果是这样,为什么Roles仍然提供?
问:我们应该只使用索赔吗?
问:我们应该一起使用角色和声明吗?
我最初的想法是我们"应该"一起使用它们.我认为他们支持的Claims
子类别Roles
.
例如:
角色:会计
索赔:CanUpdateLedger,CanOnlyReadLedger,CanDeleteFromLedger
问:他们打算互相排斥吗?
问:或者最好只去索赔并"完全符合"你的要求吗?
问:那么这里的最佳做法是什么?
示例:一起使用角色和声明
当然,您必须为此编写自己的属性逻辑...
[Authorize(Roles="Accounting")]
[ClaimAuthorize(Permission="CanUpdateLedger")]
public ActionResult CreateAsset(Asset entity)
{
// Do stuff here
return View();
}
Run Code Online (Sandbox Code Playgroud)
示例:完全限定您的索赔
[ClaimAuthorize(Permission="Accounting.Ledger.CanUpdate")]
public ActionResult CreateAsset(Asset entity)
{
// Do stuff here
return View();
}
Run Code Online (Sandbox Code Playgroud) 我注意到jQuery
并将相关的主题插件作为参数jQuery.UI
传递undefined
给模块定义中使用的匿名函数,如下所示:
(function($, undefined) { ... })(jQuery);
Run Code Online (Sandbox Code Playgroud)
或者,我注意到jQuery和/或其他人推荐的其他插件不会将undefined作为参数传递.
这可能是一个愚蠢的问题,但......
它不应该总是可用吗?为什么传递它?这里还有某种其他目的或伎俩吗?
对于Visual Studio 2017中的新项目,Windows服务模板不再默认显示....并且安装程序没有"搜索"功能.
所有这些AZURE的东西都很棒,但我仍然需要做正常的"本地"工作......而且我讨厌维护2个版本的Visual Studio.
这有什么想法?
我一直在寻找各种RIA,并注意到一些人使用或请求JavaScript路由.只是浏览它'JavaScript Routing'看起来像是一种遍历你网站的方式......但我可以使用一个简单的链接.这意味着我绝对不会得到它.
所以...
我想限制N可以使用约束可以采用的类型.我希望将N限制为int或decimal.
public static Chart PopulateInto<T, N>(List<T> yAxis, List<N> xAxis) where N : int, decimal
{
// Do stuff here
}
Run Code Online (Sandbox Code Playgroud)
任何帮助赞赏...
不久之前,我提出了一个JavaScript设计模式(模块模式 - 见下文),我从John Resig的例子中得到了一个解决某人问题的一部分,我收到了以下评论:
"......这种模式有点过于设计而不是那么好.仍然渗透到全球范围.而你不打开自己的异步装载机.但它比ad-hoc编码更好!"
所以…
如果"泄漏"到全局范围意味着"您的对象被附加到浏览器窗口(对象)"......那么所有内容都已经被追加(全局):
这"泄漏"到全球范围:
window.jQuery
Run Code Online (Sandbox Code Playgroud)
...只需调用: window.jQuery
并将其解析为函数();
这"泄漏"到全球范围:
function HelloWorld() { alert(‘Howdy’); }
Run Code Online (Sandbox Code Playgroud)
......打电话给window.HelloWorld()
你:你会得到'你好'.
这"泄漏"到全球范围:
var myVariable = 10;
Run Code Online (Sandbox Code Playgroud)
......打电话给window.myVariable
你:你会得到10分
如果评论者是正确的,那么以上所有"泄漏"到全球范围.所以,就个人而言,我没有看到一种不"泄漏"到全局范围内的方法,因为即使你的表单控件也存在(也是如此).
因此,这是我的问题......
这是我上面提到的模块模式:
<script type="text/javascript">
var myNamespace = (function($) {
var publicInstances = {};
// ***********************
// myObject
publicInstances.myObject = myObject;
function myObject() {
/// <summary>A pointer to this</summary>
var self = this;
this.someProperty = new String();
this.initialize = function() { …
Run Code Online (Sandbox Code Playgroud) 作为整体SOLID编程工作的一部分,我在基础框架API中创建了工厂接口和抽象工厂.
人们已经开始重载工厂的Create方法.问题是人们正在使用模型属性重载Create方法(从而期望工厂填充它们).
在我看来,不应该由工厂进行财产设置.我错了吗?
public interface IFactory
{
I Create<C, I>();
I Create<C, I>(long id); //<--- I feel doing this is incorrect
IFactoryTransformer Transformer { get; }
IFactoryDataAccessor DataAccessor { get; }
IFactoryValidator Validator { get; }
}
Run Code Online (Sandbox Code Playgroud)
更新 - 对于那些不熟悉SOLID原则的人,以下是其中一些原则:
单一责任原则
它规定每个对象应该只有一个责任,并且该责任应该由类完全封装
开放/封闭原则
这个原则的含义是当获得对需要添加到应用程序的功能的请求时,您应该能够在不修改旧类的情况下处理它,只需添加子类和新实现.
依赖倒置原则
它说你应该解耦你的软件模块.要实现这一点,您需要隔离依赖项.
总的来说:
我90%肯定我知道答案.但是,我想与已经使用SOLID的人进行一些很好的讨论.感谢您的宝贵意见.
更新 - 那么我认为SOLID工厂应该怎么做?
恕我直言SOLID工厂提供适当的对象实例......但这样做的方式隐藏了对象实例化的复杂性.例如,如果您有一个员工模型......您会要求工厂为您提供合适的模型.DataAccessorFactory将为您提供正确的数据访问对象,ValidatorFactory将为您提供正确的验证对象等.
例如:
var employee = Factory.Create<ExxonMobilEmployee, IEmployee>();
var dataAccessorLdap = Factory.DataAccessor.Create<LDAP, IEmployee>();
var dataAccessorSqlServer = Factory.DataAccessor.Create<SqlServer, IEmployee>();
var validator = Factory.Validator.Create<ExxonMobilEmployee, IEmployee>();
Run Code Online (Sandbox Code Playgroud)
再举一个例子,我们会......
var audit …
Run Code Online (Sandbox Code Playgroud) 在我工作的承包商使用extension methods
来实现CRUD
上,我们拥有知名的内部类.我说最好使用正常结果inheritance
,extension methods
原因如下.
CRUD
方法的来源.extension methods
大量使用reflection
(速度较慢).他的逻辑是,"它已编译,所以它很快." 也许我错了......但是因为它被编译并不意味着它不使用反射,也不意味着它比正常继承更快.
所以我的问题是:
extension methods
在引擎盖下工作?inheritance
或extension methods
使用WELL-KNOWN类是否更好?c# ×4
javascript ×4
asp.net ×3
jquery ×2
asp.net-mvc ×1
class ×1
constraints ×1
constructor ×1
generics ×1
globals ×1
inheritance ×1
linq ×1
oop ×1
plugins ×1
roles ×1
url-routing ×1