提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
目录
1.new fn()
new fn() new关键字后面跟函数 是一个表达式(运算符) 创建对象的运算 整个表达式一定会得到一个对象
1. 创建一个空对象
2. 运行构造函数,让内部的this指向创建的对象(用创建的空对象去调用构造函数)
3. 整个表达式的结果看函数的返回值:
3.1返回值是引用数据 那么就是返回值
3.2返回值不是引用数据 那么就是这个运行完毕之后的创建的那个对象
2.构造函数与普通函数的区别,以及构造函数的特点
为了与普通函数区别,构造函数名字的第一个字母通常大写。
构造函数的特点有两个。
1. 函数体内部使用了this关键字,代表了所要生成的对象实例。
2. 生成对象的时候,必须使用new命令
3.构造函数的书写格式
function Person(){
this.name='Jack'
}
Person就是构造函数
4.构造函数的使用规则
1,函数名首字母大写(不强制,味蕾和普通函数的区别)
2,通过this来给对象添加属性和方法
new关键字使用自定义的构造函数去创建对那么new不能省略
instanceof判断是否是实例对象 返回true false
4.程序举例:
举例1:
function fn() {
var obj={say:function(){
return obj
}}
return obj
}
var re=new fn()
var re2=fn().say
var re3=new re2()
console.log(re);
console.log(re2);
console.log(re3);
运行结果:
举例2:
function fn(){
console.log(arguments)
}
fn()
任何对象都是函数创建出来的==>任何对象都有构造函数
运行结果:
5.构造函数程序面试题
程序1:
var User = {
count: 1,
getCount: function () {
return this.count;
}
};
console.log(User.getCount());
var func = User.getCount;
console.log(func());
运行结果:
执行过程:
console.log(User.getCount()); // 1
getCount函数被User对象调用,所以this指向的是Userconsole.log(func()); // undefined
func变量接收的是一个函数体:
function () { return this.count; }所以, func()执行的时候, this指的是window, 而window中没有count这个属性。 所以,返回的是undefined