object in depth
创建和修改属性
创建对象
const myObject = {}; //字面量表示法
const myObject = new Object(); //Object() 构造函数
修改属性 ---- 对象中的数据是可变的
添加属性
const printer = {};
//添加属性
printer.on = true;
printer.mode = "black and white";
printer['remainingSheetes'] = 168;
printer.print = function () {
console.log('The printer is printing!');
};
移除属性
delete printer.mode;
传递参数
传递原始类型 primitive type
原始类型(字符串、数字、布尔值、Null、Undefined)是不可变的。函数中的参数(所以不会有作用域覆盖)所作的任何修改都不会影响该函数外部的原始类型,而是为该函数创建一个局部副本
function changeToEight(n) {
n = 8; // 无论 n 是什么,它此刻都是 8... 但仅仅是在这个函数中!
} let n = 7; changeToEight(n); console.log(n); // 7
传递对象
对象是可变的。如果向函数传递一个对象,会传递一个引用给该对象。
let originalObject = {
favoriteColor: 'red'
}; function setToBlue(object) {
object.favoriteColor = 'blue';
} setToBlue(originalObject); originalObject.favoriteColor; //blue
- JS中的对象是通过引用传递的,因此如果修改引用,就是在修改原始对象本身(C语言中的&引用)
同样地,将一个对象赋值给新的变量,然后改变副本,结果与上述函数参数相同。
const iceCreamOriginal = {
Andrew: 3,
Richard: 15
}; const iceCreamCopy = iceCreamOriginal; console.log(iceCreamCopy.Richard); //15 iceCreamCopy.Richard = 99; console.log(iceCreamCopy.Richard); //99 console.log(iceCreamOriginal.Richard); //99
两个对象的比较
const parrot = {
group: 'bird',
feathers: true,
chirp: function () {
console.log('Chirp chirp!');
}
}; const pigeon = {
group: 'bird',
feathers: true,
chirp: function () {
console.log('Chirp chirp!');
}
}; console.log(parrot === pigeon); //false const myBird = parrot;
console.log(myBird === parrot); //true
console.log(myBird === pigeon); //false
- 只有在将同一个对象的两个引用进行比较时,才会返回true
调用对象方法
调用方法
const developer = {
name: 'Andrew',
sayHello: function () {
console.log('Hi there!');
}
}; developer.sayHello();
developer['sayHello']();
- 数组调用
const myArray = [function alerter() {alter('Hello!'); } ];
//调用alerter()函数
myArray[0]();
访问自身属性
this
const triangle = {
type: 'scalene',
identify: function () {
console.log(`This is a ${this.type} triangle.`);
}
}; triangle.identify();
// 'This is a scalene triangle.'
- 当identify( )方法被调用时,this的值会被设置为调用它的对象.
定义方法
定义对象 --- 构造函数
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
} var myCar = new Car("Mazda", "Miata", 1990);
- 为对象类型创建一个函数以声明类型的名称、属性和方法;再用new创建对象实例
定义方法
还可以这样定义方法
function displayCar() {
var result = `A Beautiful ${this.year} ${this.make} ${this.model}`;
pretty_print(result);
} function Car(make, model, year, owner) {
this.make = make;
this.model = model;
this.year = year;
this.displayCar = displayCar; //这样
}
注意全局变量
this和调用--- 函数如何调用决定了函数内的this值
chameleon对象 由于 .lookAround() 作为一个方法被调用,因此.lookAround()中的this的值就是调用时位于点左侧的部分
const chameleon = {
eyes: 2,
lookAround: function () {
console.log(`I see you with my ${this.eyes} eyes!`); //用this检索属性
}
}; chameleon.lookAround();
全局window对象
const car = {
numberOfDoors: 4,
drive: function () {
console.log(`Get in one of the ${this.numberOfDoors} doors, and let's go!`);
}
}; const letsRoll = car.drive; letsRoll();
当一个常规函数被调用时,this的值就是全局window对象
虽然 car.drive 是一个方法,但我们还是将该函数存储在一个变量 letsRoll 中。由于 letsRoll() 是作为一个常规函数调用的,因此 this 将指向它内部的 window 对象。
window对象
window对象由浏览器环境提供
window作为全局变量,代表了脚本正在运行的窗口暴露给JavaScript代码
在有标签页功能的浏览器中,每个标签都拥有自己的window对象,同一个窗口的标签页之间不会共享一个window对象
全局变量是window上的属性
window对象处于最高(全局)级别,每个在全局级别进行的变量声明会自动成为window对象上的一个属性
window.currentlyEating === currentlyEating // true
全局变量和var、let、及const
只有使用 var 声明的变量才会将其添加到window对象中,let、const在函数外部声明的变量,不会被作为属性添加到window对象。
let eating ='rice';
window.eating === eating //false
全局函数是window上的方法
function learnSomethingNew() {
window.open('https://www.udacity.com/');
} window.learnSomethingNew === learnSomethingNew // true
避免全局变量
紧密耦合
- 紧密耦合是开发者用来表示代码过于依赖彼此细节。更改一段代码会无意中改变其他代码的功能
名称冲突
当两个(或多个)函数依赖于具有相同名称的变量时,则会发生名称冲突。
两个函数都会尝试更新或设置变量,但是这些更改将被相互覆盖。
提取属性和值
Object.keys()和Object.values()
const dictionary = {
car: 'automobile',
apple: 'healthy snack',
cat: 'cute furry animal',
dog: 'best friend'
}; console.log(Object.keys(dictionary)); // ['car', 'apple', 'cat', 'dog']
console.log(Object.values(dictionary)); // ['automobile', 'healthy snack', 'cute furry animal', 'best friend']
object in depth的更多相关文章
- node.js global object,util and so on
核心模块主要内容: 全局对象 常用工具 事件机制 文件系统访问 http服务器和客户端 global object: 所有的全局变量(除了global本身外)都是global object 的属性(a ...
- Node.js 基础库
全局对象 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global对象的属性. 我们在 Node.js 中能够直接访问到对象通常都是 global ...
- NODE.JS开发指南学习笔记2
1.核心模块 核心模块是Node.js的心脏,由一些精简高效的库组成,为其提供了基本的API.2.全局对象 global.所有的的全局变量都是其属性.其根本的作用是作为全局变量的宿主.3.全局变量 1 ...
- nodejs开发指南读后感
nodejs开发指南读后感 阅读目录 使用nodejs创建http服务器; supervisor的使用及nodejs常见的调式代码命令了解; 了解Node核心模块; ejs模板引擎 Express 理 ...
- nodejs随记01
EventEmitter var stream = require('stream'); var Readable = stream.Readable; //写入类(http-req就是),初始化时会 ...
- Node.js 手册查询-1-核心模块方法
Node.js 学习手册 标签(空格分隔): node.js 模块 核心模块 核心模块是被编译成二进制代码,引用的时候只需require表示符即可 os 系统基本信息 os模块可提供操作系统的一些基本 ...
- Node.js 常用工具 util
util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足. util.inherits util.inherits(constructor ...
- 鸟瞰Nodejs
一,基础. 1,Node的包管理器:npm; 安装node环境时会自动安装. 本地模式获取一个包:npm install [package_name] 此时包被安装到当前木的node_modules子 ...
- ***php解析JSON二维数组字符串(json_decode函数第二个参数True和False的区别)
客户端的请求体中的数据:[{"msg_id": 1, "msg_status": "HAS_READ" }, { "msg_id& ...
随机推荐
- php pdo_mysql扩展安装
本文内容是以 CentOS 为例,红帽系列的 Linux 方法应该都是如此,下面就详细说明步骤,在这里严重鄙视哪些内容??隆⑺档脑悠咴影说挠泄 PDO 编译安装的文章. 1.进入 PHP 的软件包 p ...
- 【LeetCode】回溯法 backtracking(共39题)
[10]Regular Expression Matching [17]Letter Combinations of a Phone Number [22]Generate Parentheses ( ...
- Sass--混合宏 VS 继承 VS 占位符
什么时候用混合宏,什么时候用继承,什么时候使用占位符?”其实他们各有各的优点与缺点,先来看看他们使用效果: a) Sass 中的混合宏使用 总结:编译出来的 CSS 清晰告诉了大家,他不会自动合并相同 ...
- 同步mysql
ElasticSearch同步MySql 标签: elasticsearchmysql 2016-07-01 09:07 4636人阅读 评论(8) 收藏 举报 分类: Elasticsearch( ...
- LOJ6437 PKUSC2018 PKUSC
带劲的计算几何[这一定是我WC之前开的最后一道计几!!! 每个点画个圆然后看一下交点 然后判断是多边形内还是多边形外 这个就是取圆上中点然后射线法 eps我1e-8才过 不知道为啥有的人说只能开1e- ...
- leetcode-15双周赛-1286-字母组合迭代器
题目描述: 方法: class CombinationIterator: def __init__(self, characters: str, combinationLength: int): se ...
- Yii2 $app总结
//验证登陆 Yii::$app->user->isGuest; //当前user的id Yii::$app->user->id; //当前controller的名称 Yii: ...
- iOS 开发加密做法
一般做法是这样的: 客户端 每一个请求的URL中加上时间的参数.对url中的参数是排序好的. 然后对这个URL进行MD5.将这个MD5作为最后一个参数(sign)拼接到url最后. 服务端 收到请求后 ...
- JVM调优(四)——tomcat远程debug
JVM调优(四)--tomcat远程debug tomcat远程debug jdwp协议 使用步骤 登录远程服务器,进入tomcat目录,并打开文件: //tomcat/bin/startup.sh ...
- xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
运行xcode命令报错: sh-3.2# xcodebuild xcode-select: error: tool 'xcodebuild' requires Xcode, but active de ...