构造函数的实例成员与静态成员

  • Post author:
  • Post category:其他


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('吃饭');}