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"访问,那么为什么原型不可访问?
我有一个包含2个项目的C#解决方案:
现在,奇怪的是,如果我在控制台应用程序中没有包含对"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不直接使用该包,它只是调用类库(已经有引用并正在使用它).
有人可以对这里发生的事情有所了解吗?
我有一个方法可以让我在创建一个新对象时选择原型对象(从"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"无法使用它?
为什么会这样?