构造函数:当类不够用的时候,或者我们需要实现自己的类的时候,就需要构造函数了,构造函数总结如下:

 

<script>
//构造函数模式:实现我们的实力识别;
// 对象:js中万物皆对象(自然界万物都是对象)
// 类:类是对对象的具体的细分(人类、动物类、植物类)
// 实例:是类中一个具体的东西(每一个人就是人类的一个实例)
// JS中的内置类:
// Number(数字类)、String(字符串类、我们将的字符串中的方法都是定义在这个类中的,而每一个字符串都是这个类的一个实例。所以字符串拥有这些方法)、Boolean、Object、Array、Date、RegExp类、Math类(Math比较特殊)、HTMLDivElement(每一个div元素对象都是他的一个实例)、HTMLCollection(DOM方法获取的类数组都是这个类的一个实例)、HTMLElement、Element、Node、EventTarget(这个比较重要);;;
//【学习方法:console.log(oDiv)】.
/*
console.dir(String);
var obj=new Object();//擦混剪Object这个内置类的一个实例,所以叫做实例创建的方式、
* */

//面向对象开发要求我们掌握:类的继承、封装、多态;;;;;

// 用构造函数模式创建我们的类和实例;
//一般构造函数的函数名首字母大写;
// 和工厂模式的区别”
// 1、执行的时候,不是直接的函数名()执行了,而是需要new 函数名()执行,我们把new这样的方式称之为构造函数执行,通过这种方式,原来的函数名就叫做类,这个类就会创建一个实例;
// 2、接下来像普通函数一样执行,形成一个私有的作用域,这个作用域中,浏览器会默认的创建一个对象,然后把这个对象当做当前函数行为执行主体(this),然后给这个行为主体赋值属性名和属性值;P就是构造函数的主体(也就是实例,就是this);;
//只要new一个函数,就是构造函数模式;
function CreateJsPerson(){
this.name=name;
this.writeCss=function(){
console.log("我叫"+this.name+",我会写css了;")
};
this.writeJs=function(){
console.log("我叫"+this.name+",我会写css了;")
};
}
var p=new CreateJsPerson("broszhus");
//console.log( typeof p);//返回object,p是对象的类型
//console.log( typeof CreateJsPerson);//返回function;
//构造函数模式中的this就是当前的一个实例;
var p2=new CreateJsPerson("朱安邦");
//p和p2有区别的,
//console.log(p.writeCss==p2.writeCss)//false、虽然函数没有执行;但是因为他们里的东西是私有的,所以是不等的。
//这里的writeCss等都是每一个实例的私有属性;
// 类:所有的类本身就是一个函数,属于函数数据类型,
// 实例:所有的实例,都是对象数据类型的;。
/*-------------*/
//console.log( p instanceof CreateJsPerson );//true;p是CreateJsPerson这个类创建的,所以p是它的实例。//typeof检查数据类型
//console.log( p instanceof Object );//true;因为p一个对象数据类型,而每一个对象数据类型,都是Object内置类的一个实例;
// instanceof检查某一个实例是否属于某一个类的;
//in是用来检测某一个属性是否存属于这个对象,不管是私有的还是共有的都可以检测;
//console.log("writeCss" in p)//true

//hasOwnProperty检测某一个属性名是否是这个对象的私有属性,只能检测私有的,私有乜有就是flase(不管共有的有没有)。
//p.hasOwnProperty("writeCss")

//构造函数模式,虽然解决了实例识别,但是对于一些公用的不能提取出来;如果有一些属性需要公用,就必须用到我们接下来的模式,基于构造函数模式的原型链模式;
</script>