JS原型规则有哪些呢?
1. 所有的引用类型(array, function, object)都具有对象特性, 即 可自由扩展属性 (除了null以外)
自由扩展属性就比如:
var obj ={ }; obj.a=100; var arr=[ ]; arr.a=100;function fn(){ } fn.a=100;
2. 所有的引用类型(array, function, object)都有一个_proto_属性(隐式原型),属性值是一个普通的对象。
console.log(obj._proro_); //_proto_是一个对象 console.log(arr._proro_); //_proto_是一个对象 console.log(fn._proro_); //_proto_是一个对象
3. 所有的函数,都有一个prototype属性(显示原型),属性值也是一个普通的函数
console.log(fn.prototype); //prototype也是一个对象
4. 所有的引用类型(array, function, object)的_proto_属性值指向它的构造函数的prototype属性值 (构造函数的显式原型===实例对象的隐式原型)。
console.log( obj._proto_ === Object.prototype) //true 因为obj的构造函数就是Object console.log( arr._proto_ === Object.prototype) //true 因为arr的构造函数就是Object console.log( fn._proto_ === Object.prototype) //true 因为fn的构造函数就是Object
5. 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的_proto_(即它的构造函数的prototype)中寻找。
function Foo(name,age){ this.name=name; } Foo.prototype.alertName=function(){alert(this.name);} var f = new Foo('meryl'); f.printName=function(){console.log(this.name);} //printName是对象自身新添的一个属性 f.printName()// this指向f,不用去f的构造函数的原型中找printName这个属性 f.alertName()// this也指向f,其中alertName函数是f对象的原型中的函数
网友评论文明上网理性发言 已有0人参与
发表评论: