В более ранних версиях EcmaScript вы не могли напрямую получить доступ к прототипу объектов; свойство prototype
существовало только для функций, и оно вступает в игру, когда они используются в качестве конструкторов. Таким образом, вы можете сделать это:
// This is the myObj constuctor
function myObj() {
this.a = "This is a";
this.b = "This is b";
}
// Setting a property on the constructor prototype
// All instances will share this
myObj.prototype.c= "This is c";
// Creating a new object and testing its "c" property
var obj = new myObj();
alert(obj.c); // "This is c"
Modern browsers реализации Object.getPrototypeOf
, что означает, что вы можете сделать это:
var myObj = {
a : "This is a",
b : "This is b"
}
Object.getPrototypeOf(myObj).c= "This is c";
Однако, вы должны быть осторожны! Если вы сделаете это, то все объекты, которые существуют сейчас, и все объекты, созданные в будущем, наследуют свойство c
через свою прототипную цепочку!
Это потому, что myObj
имеет тип Object
и прототип Object
наследуется все, что является объектом любого типа. Это приводит к:
var myObj = {
a : "This is a",
b : "This is b"
}
Object.getPrototypeOf(myObj).c= "This is c";
var anotherObject = {};
alert(anotherObject.c); // "This is c" -- was it expected?
See it in action.
Это должно быть просто 'myObj.c =" foo ";' – epascarello
Вы можете получить прототип из экземпляра с Object.getPrototypeOf: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/getPrototypeOf, хотя в этом случае вы, вероятно, не захотите. –
Взгляните на [Eloquent Javascript] (http://eloquentjavascript.net/chapter8.html). –