建构式模式加上
new
是很擅长创造的能力。
我:这能力也太强了吧,所以new
是只有你才会吗?
(传出熟悉的声音)
阿物件:在讨论这件事,还记得在前面有说过,不论是郑列的那些能力,或是我还没展现的能力,背後都是有血继限界这件事?
我:所以你会什麽? 血轮眼?
你各位还记得郑列之前使用各种的工具力吗?
现在我们要来说明他是如何启动能力的
let x = ["tool"]; // 假设他是郑列喔
//能力触发方式: .
//以快速整理杂物的方法为例:
x.sort();
看到这里,如果之前有认真看的读者应该会说:
不是啊那个时候明明是写Array.prototype.sort();
hasOwnProperty()
变数本身是否具有这个能力,可透过hasOwnProperty
来检查:true
代表有,false
则代表没有。
let x = ["tool"]; // 假设他是郑列喔
//帮郑列增加一个属性:工具人的自我宣告
x.isTool = "对啊,我是工具人";
//检查这个能力是不是它的
x.hasOwnProperty("isTool");
那sort
呢?
let x = ["tool"]; // 假设他是郑列喔
//检查这个能力是不是它的
x.hasOwnProperty("sort");
什麽?!那他怎麽这麽会收东西呢?
prototype
我们平常使用的许多属性与方法
其实是由原型prototype
提供,像是Array
的各种方法就是由Array.prototype
提供(如图)
不论你是用下面任一种方法建立阵列:
new
[]
都是原型(prototype)的实例(instance),所以都会从对应的原型(prototype) 取用方法。
那要怎麽取用呢?
prototype chain
这些自己没有的能力,事实上都是透过所谓的原型链 prototype chain
,去往物件原型prototype
去找,怎麽做呢?
用proto
找
也就是当我们使用一个方法时,背後实际长得跟我们所见的不太一样。
以sort()
方法为例:
let a = [3,1,2]
a.sort()
在JS引擎看来实际是这样 (但平常不会这样写)。
Array.prototype.sort.call(a,undefined);
以下以Array
为例
[]
[].__proto__ //Array 的 prototype
[].__proto__.__proto__ //object 的 prototype
[].__proto__.__proto__.__proto__ //null
有错的话,欢迎交流!我会很感谢
-- to be continued --
那今天就到这边搂!
每天的休息,是为了後面的追求,明天见。
你懂 JavaScript 吗?#19 原型(Prototype)
[笔记] 了解JavaScript中原型(prototype)、原型链(prototype chain)和继承(inheritance)的概念
>>: LeetCode 双刀流: 236. Lowest Common Ancestor of a Binary Tree
驶向新方向~ 需要花钱买交通工具吗? 每个人对於交通工具的使用需求不同,对某些偶尔使用的人来说,有需...
突破之路 此篇,采用比较严谨的方式,去建置AWS的服务,也是以同样的架构,做对比,如下图: 今日会介...
异常概述 在程序运行途中,经常会遇到各式各样的错误,这些错误被统称为异常。这类错误大部分都是Synt...
1、安装locales apt install locales 2、设置语言选项 dpkg-reco...
用WordPress.org自己架设网站,简单吗? 和我一样的外行人只要跟着买主机,一键安装Word...