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