对象属性的方式有两种:
obj['xxx']
那么,什么时候用到第二种([‘属性名’])的方式呢?
当属性名不是合法的标识名时
var obj = {}t-type = 'application' // 报错obj['content-type'] = 'application' // 正确
当 属性名不确定时
var obj = {}// 想要将 param 的值 作为 key
var param = 'age'obj.param = 42 // 变成了 {param: 42},不是想要的obj[param] = 42 // {age: 42},正确
key
必须都是字符串在 JS
中,对象的 key 值,必须都是字符串形式
如果 key 是一个 对象、数组,那么会调用 toString
方法,再存储进对象中
var a = {}var obj1 = {n: 2}
var obj2 = {m: 3}/*先调用 String()方法,变成 [object Object]所以 变成 a = {[object Object]: 4}
*/
a[obj1] = 4
a[obj2] = 5 // 所以最后操作的,都是 key = [object Object] 的属性,a['[objetc Object]']
console.log(a[obj1])
步骤:先创建空Objetc
对象,再动态添加属性、方法
缺点:语句太多
var obj = new Object()
obj.name = 'Tom'
obj.age = 42
{}
创建对象,同时指定属性、方法// 创建一个
var obj = {name: 'Tom', age: 42}// 但如果要同时创建多个,就很繁琐
var obj2 = {name: 'Jerry', age: 18}
var obj3 = {name: 'Tanmi', age: 20}
var obj4 = {name: 'Duck', age: 22}
Object
类型// 工厂函数:返回一个需要的数据的函数
function Person(name, age) {return {name,age}
}var obj = Person('Tom', 42)
var obj2 = Person('Jerry', 18)
new
创建对象function Person(name, age) {this.name = namethis.age = agethis.showName = function () {console.log(this.name)}
}var person1 = new Person('Tom', 42)
var person2 = new Person('Jerry', 18)console.log(person1)
console.log(person2)
// 使用类
function Person(name, age) {this.name = namethis.age = age
}// 使用 原型
Person.prototype.showName = function() {console.log(this.name)
}var person1 = new Person('Tom', 42)
var person2 = new Person('Jerry', 18)person1.showName()
person2.showName()console.log(person1)
console.log(person2)
子类对象.prototype = new 父类对象()
子类对象.structor = 子类本身
// 父类: Person
function Person(name, age) {this.name = namethis.age = age
}
Person.prototype.showName = function() {console.log(this.name)
}// 子类: Child
function Child(name, age) {this.name = namethis.age = age
} var child = new Child('Jerry', 18)
/*如何使得 child 可以调用 showName 方法呢child.showName()
*/
下图是原本的原型链图:
那么,我们修改原型链,将Child
的原型对象的 上级 改为 Person的原型对象就好了
所以:
// 父类: Person
function Person(name, age) {this.name = namethis.age = age
}
Person.prototype.showName = function() {console.log(this.name)
}// 子类: Child
function Child(name, age) {this.name = namethis.age = age
} // 1. 使得 子类的原型对象成为父类的实例对象
Child.prototype = new Person()
// 2. 补充原型的构造函数 为子类本身
structor = Childvar child = new Child('Jerry', 18)
// Child --> Child.prototype --> Person.prototype(showName) --> Object.prototype
child.showName() // Jerry
用于继承属性
步骤:
this
指向// 父类: Person
function Person(name, age) {this.name = namethis.age = age
}// 子类: Child
function Child(name, age, sex) {// this.name = name// this.age = age // 1. 借用 Person 中的代码// 2. 更改this指向,改为指向 Child的实例对象Person.call(this, name, age) this.sex = sex
} var child = new Child('Jeery', 18, 'man')
// 父类: Person
function Person(name, age) {this.name = namethis.age = age
}
Person.prototype.showName = function() {console.log(this.name)
}// 子类: Child
function Child(name, age, sex) {// 1. 接用 Person 中的代码// 2. 更改this指向,改为指向 Child的实例对象Person.call(this, name, age)this.sex = sex
}
// 3. 使得 子类的原型对象成为父类的实例对象
// 4. 补充原型的构造函数 为子类本身
Child.prototype = new Person()
structor = Childvar child = new Child('Jeery', 18, 'man')
child.showName()
本文发布于:2024-01-29 08:26:07,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170648797113975.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |