JavaScript 面向对象(四)构造函数
4、构造函数
至今,我们已经学习了非常多的调用函数的方式:
1对象打点调用
2圆括号直接调用 ==>
3定时器调用 ==>匿名 全局 直接叫上面两种函数,严格模式下里面的this都是undefined ,非严格模式下是windows
4事件处理函数调用 ==>
5数组枚举调用
它们体现的不同点就是函数上下文不用,它们里面的this不一样!
6新的函数调用方法!就是function被当作构造器
用 new 运算符来调用函数!new 就是一个运行函数的运算符
'new运算符能够调用函数,还能返回一个对象'用new运算符调用一个函数的时候,会经历四步走:
1函数内部悄悄的创建一个局部变量,是一个空对象{}。
2函数将自己的上下文设置为这个空对象{},
即所有语句中的'this就表示这个空对象。''
3函数将执行所有语句。
4所有语句执行后,函数将return这个对象,函数将把自己的上下文返回。0作用
用new 操作符('实例化'),可以返回具有相同属性群的对象:
function People(name,age,sex) {
this.name =name;
this.age =age;
this.sex =sex;
}
var ming =new People('ming',12,'nan');
var hong =new People('hong',11,'nv');
console.log(ming);
console.log(hong);people {name: "ming", age: 12, sex: "nan"}
people {name: "hong", age: 11, sex: "nv"}可以认为 People 是一个“类(class)”,
ming , hong , 都是这个类的“实例(instance)”。'JS中没有类的概念',我们这里只是和 Java、C++、C# 做一个类比,
'JS中只有构造函数',
'当一个函数被new操作符调用的时候,这个函数就是一个构造函数,'
用 new 来多次调用同一个函数,它总能返回一类的具有相同属性群的对象,
可以称这些对象是“同一个类的实例”,或者称为“同一类的对象”。
感觉在“构造东西”。所以这个函数很神奇,像一个模子,在制作类似的对象。为了提醒其他程序猿,这是一个必须用new调用的函数,
换句话说'提醒别人这是一个构造函数',这类'函数的名字必须首字母大写'。'JS中没有Class关键字(ECMAScript2016 增加了Class关键字)',
使用new操作符的时候,会按‘四步走’创建一些些具有相同属性群的实例,
此时就感觉有了‘类’,'JS只提“构造函数”,而不提“类”。'''JS不是一个面向对象(OO)的语言,它只是基于对象(BO)。'
1问是不是构造函数
==>'用new调用它就是一个构造函数,不用new调用就不是,'
var obj =people('sda',12,'sd');console.log(obj);
VM1869:1 undefined