English 中文(简体)
Java 原型
原标题:Javascript prototype behavior

我有办法,在创建新物体时,允许我选择原型(摘自“Javascript:The Good Part”书):

Object.create = function(o) {
    var F = function() {};
    F.prototype=o;
    return new F();
}

现在,我反对:

var car = {
   model: "Nissan"
};

我使用“Create”方法,根据这个目标制造了一个新物体:

var car1 = Object.create(car);

然后,我可以给汽车添加一个财产,并将在汽车1号(动力推进器)。 因此:

car.year=2011;      // Gets added to "car"...
alert(car1.year);   // ... Is also avaialable to car1

Q1] 这种行为表明,“年份”在汽车原型中添加,因此,该原型可加到汽车1号。 这是否正确? 如果不是的话,那么“年”的添加到哪里,为什么“伤car”和“伤car1”都可以使用?

此外,根据代表团规则,如果在物体上找不到一种方法,则会搜索其原型,然后检查链上的所有原型,直至其提出异议。 原型。 因此,如果我这样说的话:

Object.prototype.originCountry = "Japan";
alert(car.originCountry);   // Outputs Japan
alert(car1.originCountry);  // Outputs Japan

然而,如果我这样做的话:

Object.carColor= "White";
alert(car.carColor);   // Error!

Q2] 当我把财产添加到“car”(见上文car.year例时,便添加到汽车原型中。 然而,当我添加一个财产来标注时,它并未添加到目标原型中? 如果将其添加到目标原型中,那么为什么根据代表团规则无法“卡尔”?

为什么发生这种情况?

最佳回答

当你这样做时:

Object.carColor = "White";

之后的财产<代码>carColor 页: 1 目标原型。 现在是<代码>的财产。 目标。 你们期望的是:

Object.prototype.carColor = "White";

之后:

alert(({}).carColor); // Will alert "White"

因此,这里的情况就是这样。 包括<代码>{}在内的任何物体(除空物体外无)为新的<代码>。 目标,因此共享<代码>原型中确定的任何特性。 目标

关于您的<代码>目标/代码”的功能。 让我们看一线:

 1. var F = function() {};

你只是创设了一个新功能,这是一个基本上空洞的物体。 您使用一种功能而不是像<代码>{><>>>>/代码”的理由是,一项功能可以与<代码>new/code”合并。 呼吁创建该物体的新案例,条件是该功能将作为构造者。

2. F.prototype=o;

您将新的空白功能原型定在您创建的物体上。 现在,这只是一个参考。 它不是深度的。 我指的是,作为标的<代码>o的改动,任何物体的变更(实际上,它们赢得了一定变化,但似乎会发生变化)。 更进一步。

3. return new F();

现在,你刚刚创立了这一功能的新例子,该功能的原型就像你通过的目标一样。

您:

var car1 = Object.create(car);

页: 1 因此,当你这样做时:

car.year = 2011

页: 1 变化。 更像原型指的是变化。 因此,当你做这样的事情时:

car1.year

查询(首先在原型中,然后在标本中)一个名为<代码>的年度,然后查询,该原型有该编号,因此<代码>1. 年将返回<>2011/code>。

因此,底线是:

  1. A prototype is shared amongst instances.
  2. Changing the properties of an Object will not manifest into any instances changing.
问题回答

您的首例是,在您的<条码>中添加“条码>。 因为car ==F.prototype car1 instanceof F。 至Q1:是。

<代码>Object为所有物体的构造功能,car1。 如果在<代码>目标.prototype上添加一些内容,则所有物体均可使用——这是你为什么不能做到的原因,这种非数字性质就等于是所有 for。 如果您设定了<代码>的财产。 目标 构造功能,对其继承的东西没有任何改动。 Don tabe:Object 等于<代码>F功能,而不是<代码>o原型设定参数。

That function doesn t let you select the prototype object it creates a nmew object constructor, the object argument as prototype and then return a new object based on the constructor.

That new object will inherit methods and properties from the object arguments. This is to allow the creation of new objects that inherits from others.

The reason this works (and by the way Object is a core javascript object and should not be extended)

Object.prototype.originCountry = "Japan";
alert(car.originCountry);   // Outputs Japan
alert(car1.originCountry);

页: 1

Object.carColor= "White";

这是因为首先扩展了原型物体,即物体与物体构造相建后将继承这些方法和特性。

之后,我们称之为静态功能,不会转而反对从目标构造中产生。

我建议更多地了解 Java文的传承。 这方面的联系很少。

http://www.webreference.com/programming/javascript/prototypal_inheritance/index.html http://www.htmlgoodies.com/html5/tutorials/javascript-prototypical-inheritance-explained.html#fbid=xEJ2PwtH2Oh

http://unscriptable.com/2007/04/17/inheritance-explained/“rel=”nofollow> http://unscriptable.com/2007/04/17/inheritance-explained/





相关问题
selected text in iframe

How to get a selected text inside a iframe. I my page i m having a iframe which is editable true. So how can i get the selected text in that iframe.

How to fire event handlers on the link using javascript

I would like to click a link in my page using javascript. I would like to Fire event handlers on the link without navigating. How can this be done? This has to work both in firefox and Internet ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Clipboard access using Javascript - sans Flash?

Is there a reliable way to access the client machine s clipboard using Javascript? I continue to run into permissions issues when attempting to do this. How does Google Docs do this? Do they use ...

javascript debugging question

I have a large javascript which I didn t write but I need to use it and I m slowely going trough it trying to figure out what does it do and how, I m using alert to print out what it does but now I ...

Parsing date like twitter

I ve made a little forum and I want parse the date on newest posts like twitter, you know "posted 40 minutes ago ","posted 1 hour ago"... What s the best way ? Thanx.