javaScript基础(9):(原型、原型链)

85 阅读1分钟

打好基础,查漏补缺

基础是重中之重

原型

原型是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报错