1. 构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写
2. 构造函数和普通函数的区别在于:调用方式不一样。作用也不一样(构造函数用来新建实例对象)
3. 调用方式不一样。 普通的函数直接方法名加()即可 构造函数的调用需要new关键字来实现 new 方法名()
4. 内部用this 来构造属性和方法
代码演示:
<script>
// 构造函数
function Person(name,age) {
// 构造函数内部的 this 就是实例对象
// 实例对象中动态添加属性
this.name = name;
this.age = age;
// 实例对象动态添加方法
this.sayHi = function () {
console.log('大家好~');
}
}
// 实例化,p1 是实例对象
// p1 实际就是 构造函数内部的 this
// new 的参数是实参 , 与上面的形参一一对应
let p1 = new Person('小明',18);
console.log(p1);
console.log(p1.name); // 访问实例属性
p1.sayHi(); // 调用实例方法
</script>
5. 执行过程:
1.会现在内存开辟一个新的空间
2.会用this指向这个对象
3.执行函数代码 添加属性 方法
4.返回这个对象 返回到调用位置
6. 可以通过 instanceof 来检测一个对象是否属于另外一个构造函数的 返回的是布尔值
<script>
let o = {}
console.log(o instanceof Object)
// 返回 true
</script>
7. constructor 可以指回构造函数本身
<script>
function o() {}
let A = new o()
console.log(A.constructor)
//返回结果: ƒ o() {}
</script>
8. 成员区别 :
// 我们吧构造函数身上直接添加的成员,称为静态成员
// 我们吧构造函数内部的成员,称为实例成员,(实例对象使用的成员)
// 静态成员:
// 构造函数直接添加的成员,称为静态成员
// 静态成员只能由构造函数使用
// 静态属性和静态方法
// 实例成员:
// 构造函数内部的成员,称为实例成员
// 实例成员只能由实例化对象使用
// 实例属性和实例方法
function Person (uname, age) {
// 构造函数内部称为 实例化成员
this.uname = uname;
this.age = age;
this.say = function () {
console.log('说话');
}
}
// 实例化对象
let obj = new Person('张三丰', 22);
// 静态成员
Person.language = '汉语';
Person.legs = 2;
Person.eat = function () {console.log('吃饭');}