2009-07-22 19 views

答えて

6
  1. あなたはObjectプロトタイプを交換しましたので、あなたはObject(すべてのオブジェクト)から下降任意のオブジェクトにobjSayHelloメソッドを追加しているので。

  2. Object.prototypeを置き換えないでください。

あなたはおそらく必要がある:

someObj.prototype.objSayHello = function(){alert('Hello,from OBJECT prototype')}; 

はその後でそれを呼び出すために:あなたがする意味しているように見える何

someObj.objSayHello(); 

は次のとおりです。

Object.prototype.objSayHello = function(){alert('Hello,from OBJECT prototype')}; 

しかし、それはおそらくそれは私と競合するように悪い考えです正しく処理されない場合はテロータ(for...in)。

1
Object.prototype.objSayHello = function(to){alert('Hello, ' + to)}; 

上記の文は、すべてのインスタンスがすべてにObjectので添付イベントバインドの子であるとして作成されますすべてのインスタンスにobjSayHello機能を取り付けたことを意味します。例えば、

var newObject = {}; 
var anotherNewObject = new Object(); 

function person(name) { 
this.name = name; 
} 
var newPerson = new Person("Ramiz"); 

newObject.objSayHello("newObject"); 
anotherNewObject.objSayHello("anotherNewObject"); 
newPerson.objSayHello(this.name); 

ている間は、他のステートメントが間違っている、あなたはすべての親であるオブジェクトのprototypeを破棄しようとしているとして完全に無視されます。 prototypeObjectの場合、すべてのネイティブインスタンス機能は無効になります。このような間違いを避けるために、私はこれが無視されていると思います。

2

Object.prototypeは何らかの理由でconstであり、読み取り専用です。

0

Object.prototypeは実際には実際のプロトタイプではなく、参考にすぎません。内部[[prototype]]オブジェクトはプロトタイプとして使用され、一部のブラウザではprotoオブジェクトのプロパティとしてアクセス可能です。 JavaScript変数が動作する方法を考えると、Object.prototypeを別のオブジェクトに代入すると、参照は変更されますが、internal [[prototype]]オブジェクトは変更されません。したがって、オブジェクトプロパティがどのように解決されるかについては何も言わないprototypeという通常のプロパティを取得します。

なぜ、これはObject.prototype.myFunction()を実行するときに機能しますか? Object.prototypeは内部[[prototype]]への参照のの参照であるため、この関数で拡張することに問題はなく、他のオブジェクトと同様に動作します。

1

Eyelidlessnessは間違っています。can't reassign the prototypes of intrinsic typesはObject、Numberなどです。新しいプロパティのみを追加できます。あなたがあなた自身のオブジェクトを使用している場合

> Number.prototype 
    -> Number 
> Number.prototype = {} // Reassignment fails 
    -> Object 
> Number.prototype 
    -> Number 
> Number.prototype.objSayHello = 'hi' // Appending succeeds 
    -> 'hi' 
> n = new Number(); n.objSayHello 
    -> 'hi' 

、その後、あなたが更新またはプロトタイプを再割り当てすることができます(注:プロトタイプを再割り当てするだけではなく、既存のものを新しいオブジェクトに影響を与えます)。

intrisicプロトタイプを変更しないでください!これは見つからない副作用を引き起こす可能性があるため、これは「悪いこと」です。あなたは新しいプロパティを持つ基本的なタイプが必要な場合は、基本的なオブジェクトを指しているプロトタイプを使用して新しいオブジェクトを作成:

NewObject = function() {}; 
NewObject.prototype = Object.prototype; 
NewObject.prototype.value = 123; 

を今、あなたは、独自のプロトタイプ(例えば、両方からプロパティを継承する新しいオブジェクトを作成するコンストラクタを持っています'value')とObjectプロトタイプ( 'toString'、 'hasOwnProperty' ...)があります。

関連する問題