实例成员和动态成员

实例成员

实例成员:通过构造函数创建的对象称为实例对象,实例对象中的属性和方法称为实例成员。

<script>
        // 1.实例成员,就是实例对象上的属性和方法; (只有实例对象能够调用)
        function Student(username, age) {
      // 构造函数内部的 this 就是实例对象
    // 实例对象中动态添加属性
            this.username = username;
            this.age = age;
        // 实例对象动态添加方法
            this.study = function () {
                console.log('学习');
            }
        }
        // 实例对象上的属性和方法,属于实例成员
       // s1 实际就是 构造函数内部的 this
        const s1 = new Student('张三', 18);
        console.log(s1.username, s1.age);// 访问实例属性
        s1.study(); // 调用实例方法
        // 构造函数,不能调用实例成员
        // console.log(Student.username, Student.age);
        // Student.study();
</script>

总结:

  1. 构造函数内部 this 实际上就是实例对象,为其动态添加的属性和方法即为实例成员

  2. 为构造函数传入参数,动态创建结构相同但值不同的对象

注:构造函数创建的实例对象彼此独立互不影响。

静态成员

静态成员:构造函数上的属性和方法  

<script>
  // 构造函数
  function Person(name, age) {
    // 省略实例成员
  }
  // 静态属性
  Person.eyes = 2
  Person.arms = 2
  // 静态方法
  Person.walk = function () {
    console.log('^_^人都会走路...')
    // this 指向 Person
    console.log(this.eyes)
  }
</script>

 

总结:

  1. 静态成员指的是添加到构造函数本身的属性和方法

  2. 一般公共特征的属性或方法静态成员设置为静态成员

  3. 静态成员方法中的 this 指向构造函数本身

 

实例化过程

 

  1. 创建新空对象

  2. 构造函数this指向新对象

  3. 执行构造函数代码

  4. 返回新对象 构造函数里面不需要写return

prototype属性

prototype属性构造函数上的一个属性,这个属性默认是一个对象;

特点: 所有这个构造函数创建出来的实例对象,都可以访问 prototype属性 上的值;

所有构造函数上都有一个 prototype属性 这个属性默认是一个对象;

普通的静态成员,实例对象无法直接调用;

原型中的this指向

普通的函数,this指向函数的调用者;

  1. 构造函数中的this指向 - 实例对象;

  2. prototype中的this指向 - 实例对象; (重点)

<script>
        //  普通的函数,this指向函数的调用者;
        // 1. 构造函数中的this指向 - 实例对象;
        // 2. prototype中的this指向 - 实例对象; (重点) 

        // 构造函数的属性绑定写到构造函数中
        function Star(name, age) {
            this.name = name;
            this.age = age;
        }
        // 构造函数中的方法绑定,写到 prototype 上;
        Star.prototype.sing = function (song) {
            // 注意: 原型方法中的this,指向的不是原型,而是实例对象;
            console.log(this);
            console.log(this.name + '唱歌 - ' + song);
        }
        
        // 创建实例对象
        const ldh = new Star('刘德华', 18);
        ldh.sing('冰雨');

        // 创建实例对象
        const zxy = new Star('张学友', 20);
        zxy.sing('吻别');

    </script>

constructor应用

 

  1. 构造函数可以通过 prototype 属性找到原型对象;

  2. 原型对象上有一个属性 constructor ,可以找到构造函数

  3. 作用 - 能够让实例对象,找到构造函数;

  4. 通过实例对象,可以找到他的构造函数

 

<script>
        // 1. 构造函数可以通过 prototype 属性找到原型对象;
        // 2. 原型对象上有一个属性 constructor ,可以找到构造函数;
        function Star(name, age) {
            this.name = name;
            this.age = age;
        }
        // 作用 - 能够让实例对象,找到构造函数;
        console.log(Star.prototype);
        const s1 = new Star('刘德华', 18);
        console.log(s1);
        console.log(s1.constructor);
        // 通过实例对象,可以找到他的构造函数
        const s2 = new s1.constructor('张学友', 20);
        console.log(s2);
        console.log(s2.constructor);
    </script>

<script>
        // 定义一个构造函数
        function Star(name, age) {
            this.name = name;
            this.age = age;
        }
        // 构造函数真正的使用场景
        Star.prototype = {
            // 定义构造函数的属性
            // constructor: Star,
            // 不能用箭头函数; 箭头函数就不会指向实例对象了
            sing: function () { console.log('唱歌') },
            dance: function () { console.log('跳舞') }
        }
        // 给原型对象中,添加构造函数; - 后面继承的时候要用;
        Star.prototype.constructor = Star;
        // 实例
        const s1 = new Star('刘德华', 18);
        s1.sing();
        console.log(s1.constructor);
        // 注意: 如果我们用一个对象,覆盖了构造函数的原型,不要忘记修改原型中的constructor指向;
    </script>

原型链

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Python 中,类成员实例成员分别指的是在类定义中声明的变量或方法,以及在实例化类后与每个实例相关联的变量或方法。 类成员是在类定义中声明的变量或方法,它们属于类本身,而不是属于类的任何实例。在类中定义的类成员可以通过类名直接访问,也可以通过实例访问。 实例成员是在实例化类后与每个实例相关联的变量或方法。实例成员只能通过实例访问,不能通过类名访问。实例成员包括实例变量和实例方法,它们属于实例对象而不是属于类本身。 下面是一个示例代码,展示了类成员实例成员的使用: ```python class MyClass: class_variable = "I am a class variable" def __init__(self, instance_variable): self.instance_variable = instance_variable def instance_method(self): print("I am an instance method") # 访问类成员 print(MyClass.class_variable) # 实例化类并访问实例成员 my_instance = MyClass("I am an instance variable") print(my_instance.instance_variable) my_instance.instance_method() ``` 输出结果为: ``` I am a class variable I am an instance variable I am an instance method ``` 在示例代码中,`class_variable` 是一个类成员,在类定义中声明,可以通过类名 `MyClass` 直接访问。`instance_variable` 和 `instance_method` 是实例成员,在实例化类后,与每个实例相关联。`instance_variable` 是一个实例变量,只能通过实例 `my_instance` 访问;`instance_method` 是一个实例方法,也只能通过实例 `my_instance` 访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值