用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。--百度百科
在JavaScript中,实现原型模式是在ECMAScript5中,提出的Object.create方法,使用现有的对象来提供新创建的对象的__proto__。
var prototype = {
name: 'Jack',
getName: function() {
return this.name
}
}
var obj = Object.create(prototype, {
job: {
value: 'IT'
}
})
console.log(obj.getName()) // Jack
console.log(obj.job) // IT
console.log(obj.__proto__ === prototype) //true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
更多关于prototype的知识可以看我之前的JavaScript中的面向对象、原型、原型链、继承,下面列一下关于prototype的一些使用方法
1. 方法继承
var Parent = function() {}
Parent.prototype.show = function() {}
var Child = function() {}
// Child继承Parent的所有原型方法
Child.prototype = new Parent()
1
2
3
4
5
6
2
3
4
5
6
2. 所有函数默认继承Object
var Foo = function() {}
console.log(Foo.prototype.__proto__ === Object.prototype) // true
1
2
2
3. Object.create
var proto = {a: 1}
var propertiesObject = {
b: {
value: 2
}
}
var obj = Object.create(proto, propertiesObject)
console.log(obj.__proto__ === proto) // true
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
4. isPrototypeOf
prototypeObj是否在obj的原型链上
prototypeObj.isPrototypeOf(obj)
1
5. instanceof
contructor.prototype是否出现在obj的原型链上
obj instanceof contructor
1
6. getPrototypeOf
Object.getPrototypeOf(obj) 方法返回指定对象obj的原型(内部[[Prototype]]属性的值)
Object.getPrototypeOf(obj)
1
7. setPrototypeOf
设置一个指定的对象的原型 ( 即, 内部[[Prototype]]属性)到另一个对象或 null
var obj = {}
var prototypeObj = {}
Object.setPrototypeOf(obj, prototypeObj)
console.log(obj.__proto__ === prototypeObj) // true
1
2
3
4
2
3
4