初学者跪着学JavaScript Day20 : 原型毕露(中)

一日客语:中文:青色 客语:抢厶ㄟ ˋ

继续学习原型吧~
学习内容:
1.Object.getPrototypeOf() =>等於__proto__[[prototype]]
2.Object.getPrototypeOf(实例).constructor
3.利用Object.getPrototypeOf(实例).constructor 方式建立物件
4.改掉原型


现在创了一个 constructor Cat 然後new 出一个实例 nini,可以透过
Object.getPrototypeOf()语法去查找到,除了定义的 sleep 属性以外还有一个内建属性叫 constructor指向 Cat 所以
Object.getPrototypeOf(nini).constructor才能印出Cat


function Cat() {
    this.eat = () => 'apple';
}

const nini = new Cat();
Cat.prototype.sleep = 'sleep';

console.log(nini);
//Cat { eat: [Function (anonymous)] }

console.log(Object.getPrototypeOf(nini));
//{sleep: 'sleep', constructor: Cat}

console.log(Object.getPrototypeOf(nini).constructor); //[Function: Cat]

自订物件改掉原型

若是把 Cat 的原型重新赋值新的物件,原本已经创建的nini还取得到 sleep 吗
新创的 niki 取得到 sleep 吗?

继续看下去吧

function Cat() {
    this.eat = () => 'apple';
}

const nini = new Cat();
Cat.prototype.sleep = 'sleep';
console.log(Object.getPrototypeOf(nini)); //{ sleep: 'sleep' }

//原型变动
//新物件改掉Cat原型
Cat.prototype = {
    go: function () {
        return 'go';
    },
};

const niki = new Cat();

console.log(Object.getPrototypeOf(niki)); //{ go: [Function: go] }
Object.getPrototypeOf(niki).constructor//Object

答案:新物件改掉 Cat 原型,nini 仍然可以使用 sleep 方法但 niki 参照的原型已经改变所以无法取用 sleep 属性

console.log(nini.sleep);//sleep
console.log(niki.go()); //go
console.log(niki.sleep); //undefined

用图型看看

新物件(niki)会参照到新原型
在原型变动之前创造出来的物件(nini)仍然可以参照到那时的原型

下集预告

修改了Cat原型後使用Object.getPrototypeOf(niki).constructor
为何是印出 Object 呢
一开始 Object.getPrototypeOf(nini).constructor 明明是Cat为何原型有这种差异呢~~
难道原型链结构产生变化?!明天让我用instanceof来解释这些关系

function Cat() {
    this.eat = () => 'apple';
}

const nini = new Cat();
Cat.prototype.sleep = 'sleep';
console.log(Object.getPrototypeOf(nini)); //{ sleep: 'sleep' }

//原型变动
//新物件改掉Cat原型
Cat.prototype = {
    go: function () {
        return 'go';
    },
};

const niki = new Cat();

console.log(Object.getPrototypeOf(niki)); //{ go: [Function: go] }
Object.getPrototypeOf(niki).constructor//Object

资料参考:
忍者开发技巧探秘第二版


<<:  学习笔记:一起进入 PixiJS 的世界 (一)

>>:  Day 20 To Do List - 封装

第二十六天:UI切版 & 元件-图文资讯元件、ICON字型 & SVG、通知讯息元件

今天的内容 一、图文资讯元件 二、ICON: Webfont & SVG 三、通知讯息元件 ...

Day6 简介 ICS 中的控制器 Controller-PLC、PAC、RTU

PLC 可程序逻辑控制器 针对工业环境设计的逻辑控制系统,可以在记忆体中可执行以下指令如逻辑运算(...

学习Python纪录Day27 - Regular Expression正规表达式

正规表达式(Regular Expression) 一个范本的字串,在范本字串的每一个字元都有特殊意...

Day 30: 机器学习最终回 网路资源总集合

机器学习最终回 网路资源总集合 那麽也到了我们『Machine Learning With Me ,...

C国某大学生在校看色色的东西被简讯通知「...文明上网...写心得报告 」

未经实锤的资讯 中国电子科大表示:学校学工部从未发布过相关的简讯内容,表示「已经提醒各院系辅导员通知...