小编Tah*_*mad的帖子

通过Object.create()的Javascript原型

var someObj = function() { }
var p = new someObj();

alert(someObj.prototype);   // This works
alert(p.prototype);         // UNDEFINED, but why?

someObj.prototype.model= "Nissan";
alert(p.model);             // This works! I understand the dynamic nature of prototypes, but doesn't that mean that p.prototype === someObj.prototype?
Run Code Online (Sandbox Code Playgroud)

为什么会这样?由于"p"是"someObj"的一个实例,为什么原型未定义?我的意思是,当我向"someObj"原型添加属性时,它可以被"p"访问,那么为什么原型不可访问?

javascript prototype

10
推荐指数
2
解决办法
2791
查看次数

Nuget引用以奇怪的方式表现

我有一个包含2个项目的C#解决方案:

  1. 一个包含几个类的类库:其中一个类使用ADAL.NET执行身份验证,因此我引用了"Microsoft.IdentityModel.Clients.ActiveDirectory"包(v3.10)
  2. 我还有一个用作测试平台的ConsoleApplication.从这里开始,我调用类库来快速测试原型代码然后丢弃它.除了使用Console.ReadLine()和Console.WriteLine()之外,这个控制台应用程序本身只调用了1)中提到的类库.

现在,奇怪的是,如果我在控制台应用程序中没有包含对"Microsoft.IdentityModel.Clients.ActiveDirectory"的nuget引用,则会抛出错误:

[FileLoadException:无法加载文件或程序集'Microsoft.IdentityModel.Clients.ActiveDirectory,Version = 3.10.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)]

但是,当我简单地添加该引用时,一切正常.

我很困惑为什么会这样?类库已经有了对包的引用,并且类库是唯一使用该包的类,所以为什么我还要添加对控制台应用程序的引用?

有趣的是,我随后包含了一个WebApp并将所有内容发布到Azure订阅中.Web应用程序也会出现同样的问题.如果我在Web App中添加对"Microsoft.IdentityModel.Clients.ActiveDirectory"nuget包的引用,一切正常,但是如果我将其删除,则会抛出上述异常.请注意,WebApp不直接使用该包,它只是调用类库(已经有引用并正在使用它).

有人可以对这里发生的事情有所了解吗?

c# reference nuget

7
推荐指数
0
解决办法
793
查看次数

Javascript原型行为

我有一个方法可以让我在创建一个新对象时选择原型对象(从"Javascript:The Good Parts"一书中复制):

Object.create = function(o) {
    var F = function() {};
    F.prototype=o;
    return new F();
}
Run Code Online (Sandbox Code Playgroud)

现在说,我有一个对象:

var car = {
   model: "Nissan"
};
Run Code Online (Sandbox Code Playgroud)

我使用"创建"方法基于此对象创建一个新对象:

var car1 = Object.create(car);
Run Code Online (Sandbox Code Playgroud)

然后我可以添加一个属性到汽车,它将动态添加到car1(动态原型).所以对于例如:

car.year=2011;      // Gets added to "car"...
alert(car1.year);   // ... Is also avaialable to car1
Run Code Online (Sandbox Code Playgroud)

Q1)这种行为表明"年"被添加到汽车的原型中,这就是它可用于car1的原因.它是否正确?如果没有,那么"年"会在哪里添加,为什么"car"和"car1"都可以使用?

此外,根据委托规则,如果在对象上找不到方法,它将搜索其原型,然后检查链中的所有原型,直到它到达Object.prototype.所以现在,如果我键入这样的东西:

Object.prototype.originCountry = "Japan";
alert(car.originCountry);   // Outputs Japan
alert(car1.originCountry);  // Outputs Japan
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好; 但是,如果我这样做:

Object.carColor= "White";
alert(car.carColor);   // Error!
Run Code Online (Sandbox Code Playgroud)

Q2)当我向"car"添加属性时(参见上面的car.year示例,它会被添加到car的原型中.但是,当我向Object添加属性时,它不会被添加到Object的原型中吗?如果它被添加对于Object的原型,根据授权规则,为什么"car"无法使用它?

为什么会这样?

javascript prototype delegation

5
推荐指数
1
解决办法
344
查看次数

标签 统计

javascript ×2

prototype ×2

c# ×1

delegation ×1

nuget ×1

reference ×1