构造函数模式

1、要了解面向对象的思想我们需要了解构造函数模式,首先创建一个类;

function
Fn(){ this.x = 100;//this->f1; this.getX = function(){ console.log(this.x);//this->要看getX执行的时候才知道; } } var f1 = new Fn; f1.getX();->方法中的this是f1 输出100; var s = f1.getX;->把f1对应的属性名为getX后面的函数的属性值赋值给s; s();->this是window,输出undefined;
2.类具有普通函数一面,当函数执行时var 的num 其实只是当前形成的私有作用域中的私有变量而已,它和f1 这个实例没有任何关系;
只有this.xxx=xxx,才相当与给f1这个实例增加方法;

function Fn(){
var num = 10this.x = 100;

this.getX = function(){

      console.log(this.x);

       }
}
var f1 = new Fn;
console.log(f1.num)-> undefined;
3.在构造函数模式中,浏览器会默认把实例返回(返回的是一个对象数据类型的值),如果自己手动写了return返回,
//返回的是一个基本数据类型的值,当前实例不变;例如 return 100;
//返回的是一个引用数据类型的值,当前的实例的值会被替换掉;return {name:"hello"} f1 就不是Fn的实例了;而是对象{name:"hello"}

function Fn(){
this.x = 100;

this.getX = function(){

console.log(this.x)

}
return {name:"hello"}
}
var f1 = new Fn;
console.log(f1);
4.f1和f2都是Fn这个类的实例,都拥有x和getX两个属性,但是这两个属性有各自的私有属性,所以f1.getX === f2.getX->false;
function Fn(){
this.x = 100;

this.getX = function(){

console.log(this.x)
}
var  f1 = new Fn;
var f2 = new Fn;

//in:检测某一个属性是否属于这个对象;attr in object;

console.log("getX" in f1)->true;
原文地址:https://www.cnblogs.com/han6054/p/5345691.html