一、对象
在 JavaScript 中,了解原型和原型链之前,先认识对象的概念。
1、简介
对象(Object)是一种无序的键值对集合,键为字符串,值可以是任意类型。函数也是对象。
2、创建方式
常见的对象创建方式如下:
// 字面量语法创建:使用大括号{}来创建一个新对象。
var user = {
name: "Jack", age: 26 }
// 通过Object的构造函数创建
var user = new Object()
user.name = "Jack"
user.age = 26
// 通过构造函数创建
function User(name, age) {
this.name = name
this.age = age
this.say = function() {
console.log('我能说话')
}
}
var u1 = new User('Jack', 26)
var u2 = new User('Rose', 25)
通过一个函数创建的多个实例对象中包含的属性和方法是彼此对立的,占用不同的内存地址。这意味着即便两个实例的方法看起来相同,实际上它们是不同的,这会导致内存浪费。
u1.say === u2.say // false
二、原型和隐式原型
1、原型(prototype
)
在 JavaScript 中,每个函数对象都有一个特殊的属性 prototype
,它指向原型对象。实例对象可以通过原型(prototype)实现共享方法和属性。
将 say
方法放在函数对象的原型上,所有实例都可以共享这个方法,从而避免内存浪费。
User.prototype.say = function() {
console.log('我能说话')
}
u1.say() // 我能说话
u2.say() // 我能说话
console.log(u1.say === u2.say) // true