nop*_*ole 17 javascript prototype
通常说每个Javascript对象都有一个prototype属性,但我发现foo.prototype只有foo函数才有值.
在Chrome和Firefox上,obj.__proto__有一个值 - 这是所说的prototype属性吗?但是在IE 9上,它不起作用(有某种方式可以吗?),我认为prototype属性,这意味着obj.prototype应该工作?
我明白这Object.getPrototypeOf(obj)似乎显示了这个prototype属性,但为什么需要一个特殊的方法来获取它?为什么不喜欢person.name,哪个是获取对象的name属性person?
更新:顺便说一句,obj.constructor.prototype似乎有时候是原型,但有时候不是,如下面的代码用Prototypal继承完成而没有构造函数:(这个方法在Harmes和Diaz by Proress 2008的Pro Javascript Design Patterns一书中,p .46)
var Person = {
name: 'default value',
getName: function() {
return this.name;
}
}
var reader = clone(Person);
console.log(reader.getName());
reader.name = "Ang Lee";
console.log(reader.getName());
function clone(obj) {
function F() {};
F.prototype = obj;
return new F;
}
console.log("the prototype of reader is", Object.getPrototypeOf(reader));
console.log(Object.getPrototypeOf(reader) === reader.constructor.prototype);
console.log(Object.getPrototypeOf(reader) == reader.constructor.prototype);
console.log(Object.getPrototypeOf(reader) === reader.__proto__);
console.log(Object.getPrototypeOf(reader) == reader.__proto__);
Run Code Online (Sandbox Code Playgroud)
结果将显示最后4行的false,false,true,true.
Ber*_*rgi 15
每个JavaScript对象都有一个内部的"prototype"属性,通常称为[[prototype]],它指向它直接继承的对象.这是由非标准__proto__属性在FF和Chrome中公开的.Object.getPrototypeOf是这个内部财产的吸气剂.
每个JavaScript函数[object]都有一个属性prototype,用一个[几乎]空对象初始化.通过将其作为构造函数调用来创建此函数的新实例时,该新对象的[[prototype]]将指向构造函数的prototype对象.
如果你得到一个函数的[[prototype]](每个函数都是一个对象,所以它有一个),它将导致Function.prototype函数继承其方法的对象(如bind,call,apply等).另请参见为什么函数原型被重复链接?在那.
它是 constructor 每个具有prototype. 所以对于一些foo,bar或foobar:
var foo = {};
console.log(foo.constructor.prototype); //=> Object
var bar = 5;
console.log(bar.constructor.prototype); //=> Number
function Foobar(){}
var foobar = new Foobar; //Foobar used a constructor
console.log(foobar.constructor.prototype); //=> Foobar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4302 次 |
| 最近记录: |