tes*_*dtv 3 javascript prototype prototypal-inheritance
假设我有以下代码;
var A = {a:10};
var B = {b:20};
B.prototype = A;
alert(B.a);
Run Code Online (Sandbox Code Playgroud)
我对Ba的定义不明确.难道我做错了什么?如何设置对象文字的原型?
我知道如何为Constructor对象做.所以下面的代码是完美的
function A(){this.a=10}
function B(){this.b=20}
B.prototype = new A();
b = new B;
alert(b.a);
Run Code Online (Sandbox Code Playgroud)
我如何为对象文字做到这一点?
Rob*_*obG 10
对象继承自构造函数的 prototype属性,而不是它们自己的属性.构造函数的原型被分配给内部[[Prototype]]属性,该__proto__属性在某些浏览器中可用作属性.
因此,对于b从继承a,你需要把a上b的继承链,如
经典原型继承:
var a = {a: 'a'};
function B(){}
B.prototype = a;
var b = new B();
alert(b.a); // a
Run Code Online (Sandbox Code Playgroud)
使用ES5 Object.create:
var a = {a: 'a'};
var b = Object.create(a);
alert(b.a); // a
Run Code Online (Sandbox Code Playgroud)
使用Mozilla __proto__:
var a = {a: 'a'};
var b = {};
b.__proto__ = a;
alert(b.a); // a
Run Code Online (Sandbox Code Playgroud)
原型属性通常出现在 Function 对象中。这个原型应该是一个对象,这个对象用于定义用构造函数创建的对象的属性。
// Plain object, no prototype property here.
var plainObject = {one: 1, two: 2};
// Constructor, a prototype property will be created by default
var someConstruct = function() {
// Constructor property
someConstruct.constructProp = "Some value";
// Constructor's prototype method
someConstruct.prototype.hello = function() {
return "Hello world!";
}
};
// Another constructor's prototype method
someConstruct.prototype.usefulMethod = function() {
return "Useful string";
}
var someInstance = new someConstruct();
console.log(someInstance.hello()); // => Hello world!
console.log(someInstance.usefulMethod()); // => Useful string
console.log(someConstruct.constructProp); // => Some value
console.log(someConstruct.prototype); // => {usefulMethod: function, hello: function}
console.log(plainObject.prototype); // => undefined
Run Code Online (Sandbox Code Playgroud)
因此,普通对象没有原型。作为构造函数的函数确实有原型。这些原型用于填充用每个构造创建的实例。
希望有帮助:)
| 归档时间: |
|
| 查看次数: |
6236 次 |
| 最近记录: |