一.值类型和引用类型
<script>
function upateNum(num2){
console.log('num2='+num2);
num2+=5
console.log('numn2='+num2);
}
let num1 = 5 //number类型
// 值类型再调用方法传递时,传递的是值
upateNum(num1)
console.log('num1='+num1);
console.log('--------------------');
function updateArr(arr2){
console.log('arr2',arr2);
arr2.push(66)
console.log('arr2',arr2);
}
// 数组是引用类型
let arr1 =[11,22,33,44,55]
updateArr(arr1)
console.log('arr1',arr1);
// let arr3 =arr1
// let arr4 =arr1
// let arr5 =arr1
</script>
二.原型对象
<script>
// 构造函数(类)有原型对象,其实就是构造函数身上的一个自带属性,这个属性是:prototype
// 对象也有原型对象,其实就是对象身上的一个自带属性,这个属是:_proto_
// 所有同类型的对象身上的原型对象属性,都指向类的原型对象属性
// 类和对象的原型对象身上挂的方法,对象可以直接使用,不需要经过原型对象
function Student(name,age,sex){
this.name=name
this.age=age
this.sex=sex
// 如果将方法直接定义在类里面,将来根据这个类创建的每个对象,都要创建自己独立的这些方法
// 如果要创建很多对象,对内存的开销会很大。
/* this.sayHi=function(){
console.log(`Hi!我叫${this.name},今年${this.age}岁,性别是${this.age}`);
}
this.study=function(time){
console.log(`Hi!我叫${this.name},我每天学习${this.time}小时`);
}
this.pla=function(time){
console.log(`Hi!我叫${this.name},我每天玩${this.play}小时`);
} */
}
// 我们可以将类的方法,添加到类的原型对象身上
Student.prototype.sayHi=function(){
console.log(`Hi!我叫${this.name},今年${this.age}岁,性别是${this.age}`);
}
Student.prototype.study=function(time){
console.log(`Hi!我叫${this.name},我每天学习${time}小时`);
}
Student.prototype.play=function(time){
console.log(`Hi!我叫${this.name},我每天玩${time}小时`);
}
let s1=new Student('张三',20,'男')
let s2=new Student('李四',22,'女')
let s3=new Student('王五',24,'男')
// 查了Student类的原型对象
// console.log(Student.prototype)
// 查看三个对象的原型对象 -- 你会发现,长得不一样
// console.log(s1._proto_);
// console.log(s2._proto_);
// console.log(s3._proto_);
s1.sayHi()
s1.study(8)
s1.play(3)
console.log('---------------------------');
s2.sayHi()
s2.study(6)
s2.play(6)
console.log('-------------------------------');
s3.sayHi()
s3.study(10)
s3.play(1)
</script>