对象、函数
//对象的属性可以增/删/改/查,删除的对象的关键字是Delete.eg:delete a.name,
//当一个变量没有就访问的话,控制台会报错。当一个属性没有就访问的话,控制台会返回undefined
//构造函数内部原理:1.在函数体最前面隐式的加上this={}
2.执行this.xxx=xxx
3.隐式的返回this
eg:function Student(name,age,sex){
1.//var this={
2. //name:""
3. //age:
//} 这三步一定要在有new操作符的时候才会发生,隐式的出现。不然就跟函数一样,按部就班的执行。
this.name=name
this.age=age
this.sex=sex
this.grade=2017}
// return this; 隐式的返回,保存到外部
var student = new Student('zhangsan',18,'male')
console.log(student )
当给函数前面加上new操作符时,他就成为了一个自定义对象。不再是函数,而是一个对象
//this关键字是一个特别的关键字,被自动定义在所有函数的作用域中。JavaScript中的所有函数都是对象。
//this在任何情况下都不指向函数的词法作用域。每当你想要把this和词法作用域的查找混合使用时,一定要提醒自己,这是无法实现的。
//**this是在运行时绑定的,并不是在编写时绑定的,他的上下文取决于函数调用时的各种条件。this的绑定和函数声明的位置没有任何关系,
只取决于函数的调用方式。
//**当一个函数被调用时,会创建一个活动记录(有时也称执行上下文)。这个记录会包含函数在哪里被调用(调用栈),函数的调用方式,传入的
参数信息等。this就是这个几率的一个属性,会在函数执行的过程中用到。
//**this实际上就是在函数被调用,被执行时发生的绑定,它指向什么完全取决于函数在哪里访问。
//函数预编译过程中,this指向的是window
全局作用域里,this指向window
//对象的创建方法
//1.var obj={} 对象字面量/对象直接量
//2.构造函数
a.系统自带的构造函数 Object()
b.自定义
//构造函数和函数在结构上没有任何分别
//数字是原始值,原始值是不能有属性和方法的,只有对象能有。
//数字类型对象new num()、字符串类型对象new string、布尔类型对象new boolean可以有属性和方法。然而,undefined类型和null类型不能有属性和方法
//构造函数在命名的时候,严格按照大驼峰式命名规则
function sum(a,b,c,d) {
b=2
console.log(arguments[1,2,3])
// *实参列表出生的时候,有几个实参,arguments就有几个实参.本例所示,arguments=[1],arguments里只有一个1.当形参比实参多的时候,多余的形参都会被定义为undefined。不再具有映射的规则
}
sum(1)
//当实参比形参多时,会把多出来的实参放到函数内部属性里,即arguments.
//arguments--【1,2,3】,类似于数组,叫做实参列表
//arguments与形参有一条映射规则,arguments里的东西有变化,形参的赋值跟着变化。形参的赋值有变化,arguments里的东西也跟着变化
//return:本意是把一个值返回到函数的外部,还有一个功能是终止函数。