编程是很困难的事情。绝不应该在懵懵懂懂的状态下开始你的工作。
所谓编程,就是将一组需求分解成一组函数与数据结构的技能。
附加知识点:
xey: 表示10的y次方乘以x的值
例如: 1e2 = 10的平方乘以1 = 100
检测一个属性是来自于该对象的成员还是来自原型链,可以使用obj.hasOwnProperty(attr)
如果没有指定返回表达式,那么返回值是undefined。
需要弄懂的点:
- 函数式编程
- this指针
第三章 对象
const obj = {
name: 'amy',
age: 100,
happy: true
}
对象字面量:
如果是合法的非关键字,那对象的属性名就可以不用双引号,否则属性名需要加双引号。
检索:
可以通过[]
, .
的形式来获取属性值,一般使用.
, 因为简洁直观,但在属性名不合法或者是以保留关键字命名时,需要使用[]
更新
obj.name = 'aliveAmy'; //修改值
obj.gender = 'female'; //添加新属性
原型
Object.create = function(o) {
const Fun = function(){};
Fun.prototype = o;
return new Fun()
}
const another_amy = Object.create(obj);
another_amy.name // amy
another_amy.name = aliveAmy
another_amy.name // aliveAmy
delete another_amy.name 暴露原型属性
another_amy.name // amy
反射
typeof obj.name //string
typeof obj.age //number
typeof obj.happy //boolean
typeof.toString //function
typeof constructor //function
大多时候只关心数据, 所有要删除对象中冗余的方法时,有两种方式:
1. typeof xxx === function
2. obj.hasOwnProperty(xxx) //这个方法不会去检查原型
枚举
遍历出所有对象的key值,但是不会按顺序排列,可以用for in
for (attr in obj) {
console.log(attr); //属性随机排列。
}
删除
delete obj.gender
减少全局变量污染
有两种方式可以参考:
1. 只设置一个全局变量, 所用到的所有变量都在该对象下。与其他组件发生冲突的可能性会降低。
2. 闭包进行信息隐藏。
第四章
调用:
在js中一共有4种调用模式:
这些模式在如何初始化关键参数this上存在差异。
方法调用模式
当一个函数被保存为对象的属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象。如果调用表达式包含一个提取属性的动作,那它就是被当作一个方法来调用。
函数调用模式
当一个函数并非一个对象的属性时,那么它就是被当作一个函数来调用的,以此模式调用函数时,this被绑定到全局变量。
window.name = 'aliveAmy'
const nameObj = {
name: 'amy',
getAttr: function() {
console.log('方法式调用',this.name);
const that = this;
getName = function() {
console.log('函数式调用, this指向全局对象', this.name); //aliveAmy
console.log('函数式调用,改变this指针指向', that.name); //amy
}
getName() //函数式调用 'amy'
}
}
nameObj.getAttr();
构造器调用模式
使用new关键字实例化一个构造器时,将会创建一个连接到该函数的property成员的新对象,同时this会被绑定到这个新对象上。
function User() {
this.name = 'amy'
}
const user = New User; //这时候构造器User的this绑定到 user这个对象上,所以 this.name='amy' 其实就是等于 user.name = 'amy'。
function User1() {
this.name = 'amy'
return {}
}
function User2() {
this.name = 'amy'
return function() {}
}
function User2() {
this.name = 'amy'
return true
}
当构造器有return时,假如return的值为对象, 则this绑定到return的对象上, 如果不是对象, 则还是绑定在实例化构造器的对象上。
apply调用模式
apply方法让我们创建一个参数数组传递给调用函数。它也允许我们选择this的值。apply 方法接收两个参数,第一个是绑定给this的值,第二个就是一个参数数组。