JS的构造函数

对于想学js,从新手到高手,必须经历的,非常的好,转过来学习一下。


//构造函数

 //使自己的对象多次复制,同时实例根据设置的访问等级可以访问其内部的属性和方法
 //当对象被实例化后,构造函数会立即执行它所包含的任何代码
 function myObject(msg){
     //特权属性(公有属性)
     this.myMsg = msg; //只在被实例化后的实例中可调用
     this.address = '上海';
     
     //私有属性
     var name = '豪情';
     var age = 29;
     var that = this;
     
     //私有方法
     function sayName(){
         alert(that.name);
     }
     //特权方法(公有方法)
     //能被外部公开访问
     //这个方法每次实例化都要重新构造而prototype是原型共享,所有实例化后,都共同引用同一个
     this.sayAge = function(){
         alert(name); //在公有方法中可以访问私有成员
     }
     //私有和特权成员在函数的内部,在构造函数创建的每个实例中都会包含同样的私有和特权成员的副本,
     //因而实例越多占用的内存越多
 }
 //公有方法
 //适用于通过new关键字实例化的该对象的每个实例
 //向prototype中添加成员将会把新方法添加到构造函数的底层中去
 myObject.prototype.sayHello = function(){
     alert('hello everyone!');
 }
 //静态属性
 //适用于对象的特殊实例,就是作为Function对象实例的构造函数本身
 myObject.name = 'china';
 //静态方法
 myObject.alertname = function(){
     alert(this.name);
 }
 //实例化
 var m1 = new myObject('111');
 //---- 测试属性 ----//
 //console.log(myObject.name); //china
 //console.log(m1.name); //undefined, 静态属性不适用于一般实例
 //console.log(m1.constructor.name); //china, 想访问类的静态属性,先访问该实例的构造函数,然后在访问该类静态属性
 //console.log(myObject.address); //undefined, myObject中的this指的不是函数本身,而是调用address的对象,而且只能是对象
 //console.log(m1.address); //上海 此时this指的是实例化后的m1
 
 //---- 测试方法 ----//
 //myObject.alertname(); //china,直接调用函数的类方法
 //m1.alertname(); //FF: m1.alertname is not a function, alertname 是myObject类的方法,和实例对象没有直接关系
 //m1.constructor.alertname(); //china, 调用该对象构造函数(类函数)的方法(函数)
 //m1.sayHello(); //hello everyone, myObject类的prototype原型下的方法将会被实例继承
 //myObject.sayHello(); //myObject.sayHello is not a function,sayHello是原型方法,不是类的方法
 
 //---- 测试prototype ----//
 //console.log(m1.prototype); //undefined, 实例对象没有prototype
 //console.log(myObject.prototype); //Object 
 //alert(myObject.prototype.constructor); //console.log返回myObject(msg),此时alert()更清楚,相当于myObject

 //console.log(myObject.prototype.constructor.name); //china, 相当于myObject.name;


出处:点击打开链接

### JavaScript 构造函数的定义与使用 在 JavaScript 中,构造函数是一种特殊的函数,用于创建和初始化对象。构造函数的主要作用是为新创建的对象提供初始值或行为[^1]。构造函数通常以大写字母开头,以便与普通函数区分开来。通过 `new` 关键字调用构造函数时,JavaScript 会自动执行以下步骤: 1. 创建一个新的空对象。 2. 将该对象的原型(`__proto__`)链接到构造函数的 `prototype` 属性。 3. 将构造函数内部的 `this` 绑定到这个新对象。 4. 执行构造函数中的代码,为对象添加属性和方法。 5. 如果构造函数没有显式返回一个对象,则默认返回 `this`,即新创建的对象。 #### 定义构造函数 构造函数的定义方式与普通函数相同,但习惯上首字母大写,表示其作为构造函数的用途[^5]。例如: ```javascript function Car(make, model, year) { this.make = make; // 添加实例属性 this.model = model; this.year = year; } ``` 上述代码中,`Car` 是一个构造函数,它接受三个参数并为新创建的对象添加 `make`、`model` 和 `year` 属性。 #### 使用构造函数 要使用构造函数创建对象实例,必须通过 `new` 关键字调用。例如: ```javascript const myCar = new Car('Toyota', 'Corolla', 2022); console.log(myCar.make); // 输出: Toyota console.log(myCar.model); // 输出: Corolla console.log(myCar.year); // 输出: 2022 ``` 在这里,`new Car('Toyota', 'Corolla', 2022)` 创建了一个新的 `Car` 实例,并将其赋值给变量 `myCar`[^4]。 #### 构造函数的意义 构造函数的意义在于提供一种模板,用于生成具有相同结构的对象。通过构造函数,可以轻松地创建多个具有相同属性和方法的对象实例,同时为每个实例赋予独特的值[^3]。 #### 实例成员与静态成员 - **实例成员**:通过构造函数创建的对象称为实例对象,实例对象中的属性和方法称为实例成员。这些成员属于每个具体的实例对象。 - **静态成员**:构造函数本身的属性和方法被称为静态成员,它们不属于任何特定的实例对象,而是属于构造函数本身。 示例代码如下: ```javascript function Person(name, age) { this.name = name; // 实例成员 this.age = age; // 实例成员 } // 静态成员 Person.species = 'Homo sapiens'; const person1 = new Person('Alice', 25); console.log(person1.name); // 输出: Alice console.log(Person.species); // 输出: Homo sapiens ``` 在这个例子中,`name` 和 `age` 是实例成员,而 `species` 是静态成员[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值