JS 原型(prototype) DAY66

原型
物件会有自己的属性
原型也是
实体可以继承原型,原型也可以继承原型
所以继承可以一段一段向上继承,这种继承方式称为原型练
https://ithelp.ithome.com.tw/upload/images/20201022/20123039uG6e3A55tx.jpg

一个原型新增两个实体
这两个实体会共用原型的方法
https://ithelp.ithome.com.tw/upload/images/20201022/20123039c5JKG7u34i.jpg

原型特性

  • 一样具有物件的特性
  • 向上查找
  • 原型可共用方法与属性
var a = [1,2,3];
console.log(a);

a的原型 (点开proto) 会是阵列原型
https://ithelp.ithome.com.tw/upload/images/20201022/20123039HF1nFTyQAu.png

可以看到阵列原型有一个 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()); // 3
console.log(b.getLast()); // 6

这里我们再来看阵列原型上一层是什麽
会发现还有一个 物件原型
https://ithelp.ithome.com.tw/upload/images/20201022/20123039gJIjUcCIUB.jpg

我们在物件原型下新增方法,阵列实体也能透过向上查找使用此方法

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

那今天的介绍就到这里
若有任何问题 或 内容有误
都可以跟我说唷/images/emoticon/emoticon41.gif


<<:  系统开发生命周期(SDLC)

>>:  Day42. 范例:仿真Git (备忘录模式)

Week36 - 用 Apollo 快速架设 GraphQL Server [Server的终局之战系列]

大家好,GraphQL 是一个可以让 Client 弹性要求资料的技术,本文章将介绍Apollo S...

Day11 事件修饰符(2)

上次介绍完前面两个修饰符,今天就来把它学习完吧!!! .stop .prevent .capture...

进入主题-建置本地PYTHON API环境

前面10天测试完大概的API功能後, 今天本来要开始建立API方法, 但用Anaconda建置API...

[面试][人格特质]当你分享工作经验时会被问到的种种问题

每个人都有自己的人生经验,本篇文章是从笔者的角度出发,希望可以给读者带来不同的视角与观点。 从第二...

Day 4. Hashicorp Nomad: resources

Hashicorp Nomad: resources 在Kubernets的 Quality of ...