回顾 原型
prototype:函数的属性,属性值:默认是一个对象(普通的Object对象)
proto: 所有对象的属性,默认情况下指向构造函数的原型
什么情况下属性写在构造函数中,什么属性写在原型中?
function F(){
this.name = name;
this.age = age;
}
// 方法写在原型中
F.prototype.say = function(){
}
原型链
- Object.prototype.proto === null
- Function.prototype === Function.proto
- prototype.proto === Object.prototype
原型的应用
-
Object.getPrototypeOf(对象) 获取对象的隐式原型
-
对象 instanceof 构造函数 判断对象是否是这个函数构造出来的
-
Object.prototype.isPrototypeOf(对象) 判断Object.prototype是否在指定对象的原型链上
-
Object.Create(对象) 创建一个新对象,将新对象的隐式原型指向对象
-
Object.hasOwnProperty(属性) 判断属性是否是对象自身的属性
var obj = {
x:1,
y:2
}
for(var key in obj){
if(obj.hasOwnProperty(key)){
console.log(key);
}
}
创建一个对象的方法
// 1.字面量
var obj ={}
// 2.new Object()
var obj = new Object()
// 3.使用构造函数
// 4.Object.create()
对原型的操作
- 改动对象的原型
- 直接函数的原型重新赋值
this改变指向
Function的实例方法:函数去调用
- apply() 调用函数,同时指定函数中的this指向,以数组的形式传递参数
- call() 调用函数,同时指定函数中的this指向,以单个形式传递参数(一一列举)
- bind() 得到一个新函数,该函数中的this指向制定的值
通常,可以用call、apply来解决伪数组转化为真数组
NodeList
arguments
继承
- 最原始的继承
- 原型继承模式