JavaScript 传统的创建对象方法有点怪异,是用函数的形式封装。
function Animal(name) {
this.name = name // 属性
this.sleep = function() { // 方法
return 'zzZZ~'
}
}
// 上面看起来向一个函数,但实际上它是一个对象,如果你使用 “new” 的方式执行它
var cat = new Animal('cat')
console.log(cat.name) // cat
console.log(cat.sleep()) // sleep
默认下的两个实例之间是各自独立的,所以 JavaScript 在每个对象上都绑定了一个 prototype 对象,通过 prototype 将所有的对象关联起来。
/* 例 1. */
function Animal(name) {
this.name = name
this.sleep = function() {
return 'zzZZ~'
}
}
var cat = new Animal('cat')
var dog = new Animal('dog')
console.log(cat.sleep === dog.sleep) // false | 实例与实例之间的独立的
/* 例 2. */
function Animal(name) {
this.name = name // 私有
}
Animal.prototype.sleep = function() { // 共享
return 'zzZZ~'
}
var cat = new Animal('cat')
var dog = new Animal('dog')
console.log(cat.sleep === dog.sleep) // true | 通过 prototype 的关联,实例之间实现了 “数据共享”
对象与对象之间的继承关系,由于是通过 prototype 关联,所以这个继承关系通常也被称为 原型链。
/*
cat 继承关系
cat -> Animal -> Object -> null
*/
cat.__proto__ === Animal.prototype // true
Animal.prototype.__proto__ === Object.prototype // true
Object.prototype.__proto__ === null // true
/*
Array 继承关系
[] -> Array.prototype -> Object.prototype -> null
*/
[].__proto__ === Array.prototype // true
Array.prototype.__proto__ === Object.prototype // true
Object.prototype.__proto__ === null // true
// prototype 属性 | 指向当前对象的 prototype
// __proto__ 属性 | 指向父类对象的 prototype
// JavaScript 中所有对象最终都继承自 null 对象
列出当前对象的方法。
dir(Array) // ...
dir(Object) // ...
/*
dir 列出的方法中有一项 “prototype”,里面的所有方法都是共享的
由于 [] 继承了 Array ,Array 继承了 Object,所以能使用他们的方法
*/
// [1,2,3].pop
// [1,2,3].constructor
// ...
属性的验证方法。
/* in | 可以验证 “私有” “公有” “父类” 的所有能方法 */
'constructor' in [] // true
'pop' in [] // true
/* hasOwnProperty | 只验证私有方法 */
cat.hasOwnProperty('name') // true
cat.hasOwnProperty('constructor') // false
实例归属。
// [] 是 Array 的实例 ?
[] instanceof Array // trur
Array instanceof Object // true
JavaScript 数据类型
JavaScript 数字
JavaScript 字符串
JavaScript 数组
JavaScript 对象
JavaScript Map
JavaScript Set
JavaScript null
JavaScript undefined
JavaScript 类型检测
JavaScript 包装对象
JavaScript 函数
JavaScript 参数
JavaScript 匿名函数
JavaScript 箭头函数
JavaScript 递归
JavaScript 闭包
JavaScript 生成器
JavaScript 异步
JavaScript setTimeout
JavaScript setInterval
JavaScript 回调
JavaScript Promise
JavaScript async await