面向对象
类----定义属性和方法
对象
类的具体实现,继承了类所定义的属性和方法(是一种数据类型)
类是对象的抽象,对象是类的实例
程序 = 算法 + 数据结构
js是基于对象的编程语言
对象可以定义和描述很复杂的数据,让算法变的简单高效
-
js中的对象?
js语言中一切皆为对象,比如数字、字符串、数组、Math、Object、函数
js中对象的本质:属性和方法的集合(无序,所以对象没有length属性)
-
用官方一点的语言来解释对象:
什么是对象,其实就是一种类型,即引用类型。而对象的值就是引用类型的实例。在 ECMAScript 中引用类型是一种数据结构,用于将数据和功能组织在一起。它也常被称做为类,但 ECMAScript6以前却没有这种东西。虽然 ECMAScript 是一门面向对象的语言,却不具备传统面向对象语言所支持的类等基本结构。
创建对象的方式:
第一种方式:
字面量 var obj = {
键值对
key:value
}
- 对象: object
- 字面量方式创建对象
- 键值对 key: value 键和值之间用:分割,多个键值对之间用,分割
var guoer = {
name: 'yangguo',
arxhz: function () {
console.log('黯然销魂掌')
},
age: 30
}
第二种方式:
- 通过new运算符创建对象,Object注意首字母大写
- 给guoer这个对象新增一个name属性,赋值为yangguo
var guoer = new Object()
guoer.name = 'yangguo'
guoer.arxhz = function () {
console.log('黯然销魂掌')
}
// 对象名.属性名
console.log(guoer.name)
// 对象名.方法名()
guoer.arxhz()
对象遍历:for…in循环(隐式迭代)
- 遍历:一个一个的查看
- 遍历对象使用for in
- for in的语法: for (var 变量 in 要遍历的对象) { }
- 根据对象的键值对来循环,对象里有多少个键值对for就会循环多少次
- 每一次循环得到的key就是当前键(属性名或者方法名)
<script>
var guoer = {
name: 'yangguo',
arxhz: function () {
console.log('黯然销魂掌')
}
}
console.log(guoer.name)
console.log(guoer['name']) // name是属性名,这里加引号是固定写法
var a = 'name'
console.log(guoer.a) // undefined 因为guoer里面没有a属性
console.log(guoer[a]) // 这里的a不加引号,会解析a变量,把a替换成'name',相当于guoer['name']
// 如果我们确切的只是属性名是什么 那么就直接 对象名.属性名
// 如果属性名是存在一个变量里的 这个时候就需要 对象名[变量名]
guoer.arxhz()
var a = 'name'
guoer.a // undefined
guoer[a]
for (var key in guoer) {
console.log(key)
// 如果这么写的话是去guoer这个对象里直接找key这个属性,并不会把key作为变量去取值
// console.log(guoer.key) // undefined
// 需要根据key变量先取到值,再用变量的值去对象里取
// 对象名[变量名] 这里的变量里存的是对象的属性名
console.log(guoer[key])
}
</script>