原型
物件会有自己的属性
原型也是
实体可以继承原型,原型也可以继承原型
所以继承可以一段一段向上继承,这种继承方式称为原型练
一个原型新增两个实体
这两个实体会共用原型的方法
原型特性
一样具有物件的特性向上查找原型可共用方法与属性var a = [1,2,3];console.log(a);
a的原型 (点开proto) 会是阵列原型
可以看到阵列原型有一个 forEach 方法
当然 实体也可以透过向上查找使用此方法
var a = [1,2,3];a.forEach(function(i){ console.log(i);})
再来我们来证明 原型可共用方法与属性
var a = [1,2,3];var b = [4,5,6];// 这里 __proto__ 并非正式写法a.__proto__.getLast = function(){ return this[this.length-1];}console.log(a.getLast()); // 3console.log(b.getLast()); // 6
这里我们再来看阵列原型上一层是什么
会发现还有一个 物件原型
我们在物件原型下新增方法,阵列实体也能透过向上查找使用此方法
var a = [1,2,3];var b = [4,5,6];var family = { nickname: '皮杰先生'}family.__proto__.getName = function(){ return this.nickname;}console.log(family.getName());a.nickname = '阵列属性';console.log(a); // 这里要注意 阵列长度并不会改变console.log(a.getName());
使用建构式自定义原型
function Dog(nickname , color , size){ this.nickname = nickname; this.color = color; this.size = size;}var black = new Dog('小黑','黑色','大'); // 这里新产生的物件 会把 Dog 作为原型var white = new Dog('小白','白色','小'); // 这里新产生的物件 会把 Dog 作为原型console.dir(Dog); // 会看到有 proyotype属性 (函式特有属性)Dog.prototype.bark = function(){ console.log(this.nickname + '吠叫');}console.log(black , white);black.bark();white.bark();// proto 物件上// prototype 函式上// 若要在原型上新增方法 最好从它的建构函式去新增console.log(black.__proto__ === Dog.prototype); // true
那今天的介绍就到这里
若有任何问题 或 内容有误
都可以跟我说唷