javascript的原型规则
1.所有的引用类型(对象,数组,函数)都具有对象特性,既可自由扩展属性(除了null 以外)
var obj = {};
obj.a=100;
var arr = [];
arr.a=100;
function fn(){};
fn.a = 100;
2.所有的引用类型(对象,数组,函数),都有一个 _proto_属性(隐式原型),属性值是一个普通对象
console.log(obj._proto_)
console.log(arr._proto_)
console.log(fn._proto_)
3.所有的函数,都有一个prototype属性(显式原型),属性值是一个普通对象
console.log(fn.prototype)
4.所有的引用类型(对象,数组,函数),其隐式原型指向构造函数的显式原型( obj._proto_ === Object.prototype)
console.log(obj._proto_ === Object.Prototype) // true
console.log(arr._proto_ === Arrray.Prototype) // true
console.log(fn._proto_ === Function.prtotype) // true
5.当试图得到一个对象的属性时,如果这个对象本身没有这个属性,那么会去它的 proto (既构造函数的prototype)中去寻找
// 构造函数
function Fn(name){
this.name = name;
}
// 显示原型
Fn.prototype.alertName = function(){
console.log(this.name)
}
// 创建实例
var f = new Fn('张三');
f.printName = function(){
console.log(this.name);
}
f.printName(); // 张三
f.alertName(); // 张三
原型链
当试图得到一个对象obj的某个属性时,如果这个对象本身没有这个属性,那么会去它的 proto (既它的构造函数的prototype)obj._proto_中去寻找;当obj._proto_也没有时,便会在obj._proto_._proto_(既obj的构造函数的prototype的构造函数的prototype)中去寻找,直到Object.prototype
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。