『JavaScript』核心
弱类型语言
JavaScript是一种弱类型的语言。变量可以根据所赋的值改变类型。原始类型之间也可以进行类型转换。其弱类型的物质为其带来了极大的灵活性。
注意:原始类型使用值传递,复合类型使用引用传递。
| 原始类型 | Key |
|---|---|
| 布尔型 | bool |
| 数值型 | number |
| 字符串型 | string |
| 空类型 | null |
| 未定义类型 | undefined |
toString方法可以把数值或布尔值转换为字符串。parseFloat和parseInt函数可以把字符串类型转变为数值。双重非『!!』可以把字符串或数值转变为布尔值。
| 复合类型 | Key |
|---|---|
| 对象 | object |
| 函数 | function |
prototype
JavaScript是一种基于原型的语言,所以我们可以通过对JavaScript对象的原型进行操作来达成一些目的。比如:
- 给某个对象添加方法;
- 给某个对象添加属性;
- 实现类似面向对象的功能;
- ...
如果把JavaScript中的所有元素都当成对象来看待的话,我们可以得到一个合理的数据存储方式:JSON。
在JavaScript内部,所有的元素都可以认为是以JSON方式进行存储的。换言之,每一个元素都是有Key以及Value两部分组成。所以以下给对象Anim添加方法的方式都是正确的:
// Anim Class
var Anim = function() {
// ...
};
// Add function to Anim
Anim.prototype.start = function() {};
Anim.prototype.stop = function() {};
// Another Way to add function to a class
Anim.prototype = {
start: function() {
// ...
},
stop: function() {
// ...
}
};
我们还可以使用下面的方式给Anim添加方法。这一方式是将prototype.method看作是一个key,将function(name,fn)看作是一个value,然后通过给function(name,fn)传入对应的参数来实现给Anim添加方法的目的。我们还在method中加入了return this,以此来实现链式调用的目的。
// Add a method to the Function object that can be used to declare methods.
Function.protype.method = function(name, fn) {
this.prototype[name] = fn;
return this; // 链式调用
};
var Anim = function() {};
Anim.method('start', function() {
// ...
});
Anim.method('stop', function() {
// ...
});
// Add a method to the Function object that can be used to declare methods.
Function.protype.method = function(name, fn) {
this.prototype[name] = fn;
return this;
};
var Anim = function() {};
Anim.method('start', function() {
// ...
});
Anim.method('stop', function() {
// ...
});
链式调用
Anim.
method('start', function() {
// ...
}).
method('stop', function() {
// ...
});
函数是一等对象
在JavaScript中,『函数』被认为是带有可执行代码的复合对象。也就是说,对象所拥有的,函数都拥有,且对象所能做的,函数都可以做。
主要特性:
- 可以存储于变量中;
- 可以作为参数传给其他函数;
- 可以作为返回值从其他函数传出;
- 可以在运行时构造。
由于函数是一种对象,所以我们可以以如下方式来使用函数:
// Function as Object
(function() {
// ...
})()
(function(a, b) {
// ...
return a + b
})(1, 2)
对象的易变性
在JavaScript中,所有的元素都可以被当成是对象,而且JavaScript中,所有的对象都是易变的。
我们可以使用如下的方式在程序运行时给JavaScript对象属性:
可以在需要的时候给对象添加属性(包括方法):
function aFunction(){};
aFunction.aAttribute = 0;
可以在需要的时候,通过对prototype的操作,给JavaScript对象添加方法:
function person(){
this.name="Aaron";
this.age=14;
};
person.prototype = {
getName: function(){
return this.name;
},
getAge: function(){
return this.age;
}
}
注意:由于JavaScript可以在任何时候为已经存在的对象添加属性、方法,所以我们往往不能保证最终被调用的属性、执行的方法是否是我们最初所编写的。
『JavaScript』核心的更多相关文章
- 『JavaScript』new关键字
原文 new关键字做了什么 在JavaScript中,使用new关键字后,意味着做了如下四件事情: 创建一个新的对象,这个对象的类型是object: 设置这个新的对象的内部.可访问性和[[protot ...
- 『JavaScript』封装
封装可以被定义为对对象的内部数据表现形式和实现细节进行隐藏.通过封装可以强制实施信息隐藏. 在JavaScript中,并没有显示的声明私有成员的关键字等.所以要想实现封装/信息隐藏就需要从另外的思路出 ...
- 『JavaScript』模仿接口
JavaScript中并没有内置的创建或实现接口的方法.这里将利用JavaScript的灵活性,来实现与接口意义相同的功能. 什么是接口? 接口的好处: 接口提供了一种用以说明一个对象应该具有哪些方法 ...
- 『设计』Laura.Compute 设计思路
前言: 前一篇文章 <『开源』也顺手写一个 科学计算器:重磅开源> ,继 Laura.Compute 算法开源之后,有 博客园 园友 希望公开一下 Laura.Compute算法 的 设计 ...
- 『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布
项目原因: 参与过各种 分布式项目,有 Socket,Remoting,WCF,当然还有最常用的可以跨平台的 WebService. 分布式编码的时间浪费: 但是,无一例外的,开发分布式程序的开发遵循 ...
- 『PyTorch』第三弹重置_Variable对象
『PyTorch』第三弹_自动求导 torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现 Varibale包含三个属性: data ...
- 『cs231n』计算机视觉基础
线性分类器损失函数明细: 『cs231n』线性分类器损失函数 最优化Optimiz部分代码: 1.随机搜索 bestloss = float('inf') # 无穷大 for num in range ...
- 『AngularJS』理解$Scope
理解$Scope 执行概要 在AngularJS,一个子scope通常原型继承于它的父scope.应用于这个规则的表达式是一个使用scope:{...}的指令,这将创建一个『孤岛』scope(非原型继 ...
- 多线程:『GCD』详尽总结
本文用来介绍 iOS 多线程中 GCD 的相关知识以及使用方法.这大概是史上最详细.清晰的关于 GCD 的详细讲解+总结的文章了.通过本文,您将了解到:1. GCD 简介2. GCD 任务和队列3. ...
随机推荐
- 战神CPU计算机硬件组装
今天本来更新DP常见优化的,但是下午土木学院吴书记找我组装电脑,晚上A题后,临时有一些事情,没来得及整理. 这里分享一下战神CPU(死垃圾)的组装. 一顿操作猛如虎,很艰难的装好机子了,发现吴书记被坑 ...
- [19/03/20-星期三] 常用类_Enum(枚举)类
一.概念(JDK 1.5之后才有的类) 所有的枚举(英语:enumeration) 类型隐性地继承自 java.lang.Enum.枚举实质上还是类,而每个被枚举的成员实质就是一个枚举类型的实例,他们 ...
- Spring data jpa命名规范
JPA命名规范 (sample与JPQL等效) Table 4. Supported keywords inside method names Keyword Sample JPQL snippet ...
- sqlite配置下载安装教程
安装教程 第一步: 首先去官网下载:https://www.sqlite.org/download.html 或直接下载:https://github.com/weibanggang/sqlite 下 ...
- C# String与StringBuilder (转载)
1.什么时候用String?什么时候用StringBuilder? 字符串一旦创建就不可修改大小,所以对字符串添加或删除操作比较频繁的话.那就不要用String而用StringBuilder. 例如: ...
- <head> 中的 JavaScript 函数
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- ATK 设计框架 之 Atk.CustomExpression
在ATK-DataPortal框架中的xxxHandel中常用到的一种类型,形如: 1.protected virtual D ItemHandle(D item, Func<E, E> ...
- [NOI2002]荒岛野人(exgcd,枚举)
题目描述 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,…,M.岛上住着N个野人,一开始依次住在山洞C1,C2,…,CN中,以后每年,第i个野人会沿顺时针向前走Pi ...
- jdbc学习笔记02
数据库连接池 DBCP DataBase Conection Pool:数据库连接池 如果没有数据库连接池,每一次业务都需要服务器和数据库服务器建立一次连接,业务处理完连接断开,如果有1万次业务处理, ...
- LeetCode 删除链表倒数第N个节点
基本思路 定义两个指示指针a b 让a先行移动n+1个位置 若a指向了NULL的位置,则删除的是头节点(由于走过了n+1个节点刚好指在尾部的NULL上) 否则让b与a一起移动直至a->next, ...