构造函数模式-扩展
构造函数特征
1,在构造函数模式中,一个无需进行传参的被new的函数,书写函数时可省略小括号。
示例:
function Fn(){
this.say = function() {console.log("OK");};
}
var p1 = new Fu;//省略“()”
2,在构造函数模式中,若属性值是
2.1 基本数据类型的,this是当前类的实例
2.2 若是属性值是函数引用数据类型的方法时,this表示的对象在方法执行时才能被确定。
示例:
function Fn(){
this.x = 100;
this.y = 200;//this -> p1示例
this.getX = function(){
//this -> 谁调用该函数,就代表谁
console.log(this.x);
}
}
var p1 = new Fn;
p1.getX();//this表示 p1
3,类具有普通函数的特征,在类中声明定义一个变量,该变量是当前类的私有作用域中的私有变量,类所创建的实例是无法使用该变量的。
示例:
function Fn(){
var num = 10;//构造函数中的一个私有变量
this.x = 100;
this.y = 200;
this.getX = function(){
console.log("this.x");
};
}
var p1 = new Fn;
conlog.log(p1.num);//尝试用实例来引用num私有变量,输出undefined
4,在构造函数模型中,在函数中手动添加return返回语句的两种情况
4.1 当返回值是一个基本数据类型的值时,当前的实例不会被改变
4.2 当返回值是一个引用数据类型的值时,当前的实例会被返回的引用数据类型的值所覆盖
示例:
function Fn(){
this.x = 10;
this.y = 100;
this.getX = function(){
console.log(this.x);
};
//return 100;
//return {xx:1000};
}
var p1 = new Fn;
console.log(p1.getX());
/*
*正常调用 输出10
*return 100 输出10
*return {xx:1000} 输出1000
*/
5,检测语句
5.1 检测某一个实例是否属于类的,使用instanceof来判断。
5.2 检测某一个属性是否属于对象的,使用in来判断。
5.3 检测某一个属性是否属于对象的私有属性,使用hasOwnProperty来判断。