oop全称是:Obeject Oriented Programming
1.构造函数和普通的函数之间的区别在于他的函数名首字母要大写,构造函数也叫类。
2.对象也叫实例。
3.由类=》对象的过程叫实例化。
4.实例方法有constructor和instanceof。
对象名.constructor返回的结果是一个类;而对象名 instanceof 类则是判断该对象是否属于这个类。
5.静态属性和方法也叫类属性和类方法,只能由类本身来调用。
6.私有属性,只能在函数体内用,相当于局部变量。
/* 封装 */ function Person1(){ console.log("你的函数被调用了"); } var zhangsan = new Person;//实例化 会调用构造函数 zhangsan.name = "zhangsan";//实例属性 //实例方法 zhangsan.say = function (){ console.log("hello") }; /* 构造函数 */ function Person(name,age,sex){ this.name = name; this.age = age; this.sex = sex; } /* 实例化 */ var zhangSan = new Person("张三",20,"男"); var liSi = new Person("李四",23,"男"); var xiaoFang = new Person("小芳",22,"女");
/* 实例方法 */ console.log(zhangSan.constructor);//返回对象的构造函数 console.log(liSi instanceof Person);//判断对象是否是某个类的实例
Animal.age = 10; /* 静态方法(类方法)*/ Animal.move = function (){ console.log("移动"); }; /* 实例化对象 */ var cat = new Animal; Animal.move(); /* 私有属性 */ function Human(name){ this.name = name; var age = 100;//私有属性,只能咋函数体内用 this.getAge = function(){ if(this.name == "zhangsan2"){ return age; } } } var zhangsan2 = new Human("zhangsan2"); console.log(zhangsan2.name); console.log(zhangsan2.getAge()); //console.log(zhangsan2.age);//无法调用私有属性 var lisi2 = new Human("lisi2"); console.log(lisi2.name); console.log(lisi2.getAge()); //console.log(lisi2.age);//无法调用私有属性
/* 作用域链 变量提升 */ //1 var data = 10; function fun1(){ var data = 100; } fun1(); console.log(data);//data = 10 //2 function fun2(){ data = 100; } fun2(); console.log(data);//data = 100 //3 function fun3(){ data = 100; fun4(); function fun4(){ data = 1000; fun5(); function fun5(){ data = 10000; } } } fun3(); console.log(data);//data = 10000