About JavaScript variables, methods, objects

Variable declaration in advance

使用var关键字声明的变量,会在所有代码执行之前,先被声明,但不会被赋值
但是如果声明变量时没有使用var关键字,那么变量不会被声明提前

Function declaration in advance

使用函数声明形式创建的函数 function() { 	}, 它会在所有代码执行之前将该函数创建声明,所以 其他代码在函数声明之前可以调用该函数
而如果使用函数表达式的形式去创建函数,即 xxx=function(){	}	,这种类型就不会进行函数的声明提前
**注意:在函数中,不使用var来声明的变量,都没有被声明提前,而且无论它在什么位置,都会变成全局变量** 
而使用var来声明的变量,则被声明提前,而且是局部变量,只在函数内部有效

this parameter

浏览器解析器会在调用函数的时候,每次都向函数内部传递一个隐含的参数,这个参数就是 this ,this指向的是一个对象
根据函数的调用方式的不同,this也会指向不同的对象:
	1、直接调用函数时,this永远都是window
	2、调用对象的方法时,this就是调用该方法的对象 object

Creating an object using the factory method

所谓工厂方法,实际上就是写一个新的带有参数的函数,将参数值传给函数内的对象的属性,这样的对象的属性就可以随着参数的改变而改变
function createPerson(name,age,gender){
	//先创建一个对象
	var obj = new Object();
	//向对象中添加属性
	obj.name = name;
	obj.age = age;
	obj.gender = gender;
	obj.sayName = function(){
		alert(this.name);
	}
	return obj;
}

var obj2 = createPerson("杰尼龟",18,"男")

Construction method

因为使用工厂方法创建对象有一定的缺点
所以就要用到的是 构造方法
构造方法的首字母要大写,
构造方法的执行流程:
1、立即创建一个新的对象
2、将新创建的对象设置为方法中的this,在构造方法中this来引用新的对象
3、逐渐执行方法中的代码
4、将新创建的对象作为返回值返回
function Person(name,age,gender){
	this.name = name;
	this.age = age;
	this.gender = gender;
	this.sayName = function(){
		alert(this.name);
	}
}
var per = new Person("杰尼龟",18,"男")
使用同一个构造方法创建的对象,称为一类;
我们将通过构造方法创建的对象,称为该类的实例

Prototype object

我们所创建的每一个函数,解析器都会向函数其中添加一个prototype属性,这个属性(对应着一个对象)就相对于一个对象,这个对象就是原型对象。
如果一个函数只是一个普通的函数调用prototype没有任何作用
当函数以构造方法的形式调用时,此构造方法所创建的对象中都会有一个隐含的属性,我们可以通过_proto_来访问该原型对象
原型对象相当于一个公共的区域,所有同一类的实例,都可以访问该原型对象,所以我们可以将对象中的共有的内容,统一设置到原型对象中。
所以以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到原型对象中,这样可以节省空间。
function MyClass(){
	//此方法为构造方法
}

//向MyClass的原型中添加一个方法
MyClass.prototype.sayHello = function(){
	alert("hello");
}
//实例化一个对象
var mc = new MyClass();
console.log(mc._proto_== MyClass.prototype); //返回值为true

MyClass函数
prototype	对应地址 0x123

通过MyClass创建的对象mc					三者共有的原型对象  地址 0x123
_proto_	对应地址 0x123						可以向该对象中添加共有的属性

通过MyClass创建的对象mc2
_proto_	对应地址 0x123

** 关于检查对象中是否含有该属性: **
可以使用in检查对象中是否含有某个属性,如果对象中没有,但是原型中			有,也会返回true
可以使用对象的hasOwnProperty() 来检查对象自身中是否含有该属性,使用该方法只有当对象自身中含有该属性时,才会返回true

因为原型对象也是对象,所有原型对象也有原型
	当我们使用是一个对象的属性或者方法时,会先在自身中寻找,自身中有就直接使用,
	如果自身没有就去原型对象中寻找,如果原型对象有就用
	如果原型对象中还没有,就去原型对象中的原型中寻找
Released six original articles · won praise 0 · Views 78

Guess you like

Origin blog.csdn.net/gq1026/article/details/104361239