打好基础,查漏补缺
基础是重中之重
原型
原型是function对象的一个属性,它定义了构造函数构造的对象的公共父类。通过该构造函数产生的对象,可以继承该原型的属性和方法。
// Person.prototype --- 原型 构造函数生成时就有
function Person (){
}
对象如何查看对象的构造函数 constructor
在构造函数生成时,构造函数的原型内部自带一个属性constructor,指的是构造函数,就是为了让构造器构造的所有对象能找到构造器。
Person.prototype={ // 构造函数的原型
constructor:function Person (){} // 可以手动更改掉原型内的构造函数
}
function Person (){
}
var person = new Person();
对象如何查看原型__ proto __
__ proto __ 就是在new操作符操作后,在构造函数执行时隐式声明this时的一个属性。它指向了当前构造函数的原型。当访问这个对象属性时,这个对象没有这个属性就会沿着 __ proto __ 向上查找。
每个对象都有__ proto __属性指向它的原型。
Person.prototype.name = 'To'
function Person (){
// var this = {
// __proto__ : Person.prototype
// }
}
var person = new Person();
原型链
Person.prototype.__ proto __ == Object.prototype
对象中函数的this,谁调用这个函数this指向谁
绝大多数对象的最终都会继承自Object.prototype
Object.create(原型)
var obj = {name:‘To’,age:19}
var obj1 = Object.create(obj)
var obj2 = Object.create(null) // 值为null创建的对象无原型
toString()
var num = 123
// 123.toString() XX 这个点会先识别为浮点型
num.toString() ------------>new Number(num).toString()
<!--
Object.prototype.toString()
Array.prototype.toString()
String.prototype.toString()
Number.prototype.toString()
Boolean.prototype.toString()
-->
所以这个toString是在Number.prototype上的
而undefined和null是没有包装类 的过程的,所以这两个数据类型使用toString报错