一,需要了解的知识点

构造函数

和普通函数是一样的,只是调用方式是不一样,
eg:

function Person(name,age){
    this.name=name;
    this.age=age;
    this.say=function(){
        return  ("i am forever").join(this.age);  
    }
}

var person = new Person ("andy",18);//需要使用new关键字来调用 new Person();
Person ("andy",18);//普通函数的调用方式:直接调用 person()

构造函数的prototype属性

每个函数(对象)都会有prototype属性,该属相指向的便是原型对象;
Person.prototype.construct===Person //true
prototype等价于__proto__。 __proto__是社区提出来的,所以有些浏览器是不具有该属性的

原型对象

construct属性

对象的constructor属性用于返回创建该对象的函数,也就是我们常说的构造函数。
所以原型对象的constructor属性指向的是构造函数。

三者关系

protytype.png
image.png
实际生产中一般使用.getPrototypeOf()获取实例原型对象,__proto__,虽然很多浏览器提供了。单不建议生产环境下使用。

二,拓展运用,对于new关键字的理解。

1,创建一个空的对象。
var obj={}
2,链接该对象(即设置该对象的构造函数)到另一个对象。也就是把该空对象的原型指向构造函数的原型。
obj.__proto__=Object.prototype
3,将步骤1的新创建的对象作为this的上下文。
Person.call(person,args);//改变this上下文 js中使用call,apply
4,若构造函数中没有返回值或返回值是基本类型(Number、String、Boolean)的值,则返回新实例对象。
return person;//这里只有当构造函数没有返回值的时候才是返回新创建的对象。


用户bPbuFxB
51 声望4 粉丝