04 2020 档案
摘要:var a; typeof a; // undefined var b = c; var c; b = c; typeof b; // undefined typeof c; // undefined 大多数开发者倾向于将 undefined 等同于 undeclared(未声明),但在 JavaS
阅读全文
摘要:JavaScript 有 7 中内置类型: 空置 ( null ) 未定义( undefined ) 布尔值( boolean ) 数字( number ) 字符串( string ) 对象( object ) 符号( symbol, ES6 新增) 除对象之外,其他统称为 “基本类型” typeo
阅读全文
摘要:我们已经明白了 “类” 和 “委托” 这两种设计模式的理论区别,我们再看看它们思维模型方面的区别 典型的原型面向对象风格 function Foo(who) { this.me = who; } Foo.prototype.identify = function () { return "I am
阅读全文
摘要:[[Prototype]] 机制就是指对象中的一个内部链接引用另一个对象。如果在第一个对象上没有找到需要的属性或者方法引用,引擎就会继续在 [[Prototype]] 关联的对象上进行查找。同理,如果后者中也没有找到需要的引用就会继续查找它的 [[Prototype]] ,以此类推。这一系列对象的链
阅读全文
摘要:[[Prototype]] 机制就是存在于对象中的一个内部连接,它会引用其他对象。这个链接的作用:如果在对象上没有找到需要的属性和方法,引擎就会继续在 [[Prototype]] 关联的对象上进行查找。同理,如果在后者中也没有找到需要的引用就会继续查找它的 [[Prototype]],以此类推。这一
阅读全文
摘要:instanceof function Foo() { // ... } Foo.prototype.blah = ...; var a = new Foo(); 我们如何找到 a 的 “祖先” (委托关联)呢?第一种方法: a instanceof Foo; // true instanceof
阅读全文
摘要:function Foo(name) { this.name = name; } Foo.prototype.myName = function () { return this.name; } var a = new Foo('a'); a.myName(); // 'a' JS 中太多模拟类的行
阅读全文
摘要:function Foo(name) { this.name = name; } Foo.prototype.myName = function () { return this.name; } var a = new Foo('a'); var b = new Foo('b'); a.myName
阅读全文
摘要:function Foo() { // ... } var a = new Foo(); 是什么让我们认为 Foo 是一个类,Foo() 是构造函数调用。其中一个原因是我们看到了关键字 new。 除了令人迷惑的构造函数语义外,Foo.prototype 还有另一个绝招 function Foo()
阅读全文
摘要:在 JS 中,我们并不会将一个对象(类)复制到另一个对象(实例),只是将它们关联起来,[[Prototype]] 机制如下图所示 这个机制通常被称为 原型继承,这个名称主要是为了对应面向类的世界中继承的意义,但是推翻了动态脚本中对应的语义 继承这个词会让人产生非常强的心理预期。仅仅在前面加个原型并不
阅读全文
摘要:JS 中有一个奇怪的行为一直被无耻的滥用,那就是模仿类。这种行为利用了函数的一种特殊特性:所有的函数默认都会拥有一个名为 prototype 的公有并且不可枚举的属性 function Foo() { // ... } Foo.prototype; // {} Foo.prototype 会指向一个
阅读全文
摘要:哪里是 [[Prototype]] 的尽头呢?所有普通的 [[Prototype]] 链最终都会指向内置的 Object.prototype。它包含了 JS 许多通用的功能,比如 .toString() .valueOf() .hasOwnProperty() .isPrototypeOf() 给一
阅读全文
摘要:JS中的对象有一个特殊的 [[Prototype]] 内置属性,其实就是对于其他对象的引用。几乎所有的对象在创建时,[[Prototype]] 属性都会被赋予一个非空的值。 var myObject = { a:2 } myObject.a; [[Prototype]] 引用有什么用呢?比如当你试图
阅读全文
摘要:① 什么是类,描述了一种代码的组织结构,一种在软件中对真实世界中问题领域的建模方法 ② // 非常简单的 mixin() 例子 function mixin(sourceObj, targetObj) { for (var key in sourceObj) { // 只会在不存在的情况下复制 if
阅读全文
摘要:var Something = { cool: function () { this.greeting = 'Hello World'; this.count = this.count ? this.count + 1 : 1; } } Something.cool(); Something.gre
阅读全文
摘要:JS 的对象机制并不会自动执行复制行为,由于其他语言中表现出来的复制行为,因此 JS 开发者也想出了一个方式来模拟类的复制行为,这个方法就是混入。我们先看第一种,显式混入。 // 非常简单的 mixin() 例子 function mixin(sourceObj, targetObj) { for
阅读全文
摘要:class Vehicle { constructor() { this.engines = 1 } ignition () { console.log('Turning on my engine'); } drive () { this.ignition(); console.log('Steer
阅读全文
摘要:在面向类的语言中,可以先定义一个类,然后定义一个继承前者的类。后者通常被称为 “子类”,前者通常被称为 “父类”。这些术语显然是类比父母和孩子。 定义好一个子类之后,相对于父类来说它就是一个独立并且完全不同的类。子类包含父类行为的原始副本,但是也可以重写所有继承的行为甚至定义新行为 思考下面关于类继
阅读全文
摘要:“类”和“实例”的概念来源于房屋建造。 建筑蓝图只是建筑计划,它们并不是真正的建筑,我们还需要建筑工人来建造建筑。建筑工人会按照蓝图建造建筑。实际上,他会把规划好的特性从蓝图中复制到现实世界的建筑中 建筑成为了蓝图的物理实例,本质上就是对蓝图的复制。 如果你想打开一扇门,那就必须接触真实的建筑才行-
阅读全文
摘要:在相当长的一段时间里,JS 只有一些近似类的语法元素,比如 new 和 instanceof,不过后来的 ES6 中新增了一些元素,比如 class 关键字。这是不是意味着 JS 中实际上有类呢?简单来说: 不是 由于类是一种设计模式,所以可以用一些方法近似实现类的功能。为了满足对于类设计的最普遍需
阅读全文
摘要:好的设计就是把数据以及和它相关的行为打包(封装)起来,这在正式的计算机科学中有时被称为数据结构 用来表示一个单词或者短语的一串字符通常被称为字符串。字符就是数据。但是你关心的往往不是数据是什么,而是可以对数据做什么,所以可以应用在这种数据上的行为(计算长度,添加数据,搜索等)都被设计为 String
阅读全文