一,原型的指向可以发生改变
function person(){
}
function stu(){
}
stu.prototype=new person()
二,原型继承
function person(name, age) {
this.age = age
this.name = name
this.say = function () {
console.log(this.name + "会睡觉");
}
}
person.prototype.sex = "男"
person.prototype.sleep = function () {
console.log((this.name + "会睡觉"));
}
function student(code) {
this.code = code
this.study = function () {
console.log(this.name + "热爱学习");
}
}
student.prototype = new person("小明", 22)
var stu = new student(100)
student.prototype.height = 200
student.prototype.play = function () {
console.log("热爱游戏");
}
console.log(stu.code);
stu.study()
console.log(stu.height);
stu.play()
console.log(stu.name);
stu.say()
console.log(stu.sex);
stu.sleep()
三,构造继承
function person(name, age) {
this.age = age
this.name = name
this.say = function () {
console.log(this.name + "会睡觉");
}
}
person.prototype.sex = "男"
person.prototype.sleep = function () {
console.log((this.name + "会睡觉"));
}
function student(code, name, age) {
this.code = code
this.study = function () {
console.log(this.name + "热爱学习");
}
person.call(this, name.age)
}
student.prototype = new person()
var stu = new student(100, "xiaoming", 18)
student.prototype = new person("小明", 22)
student.prototype.height = 200
student.prototype.play = function () {
console.log("热爱游戏");
}
四,深拷贝与浅拷贝
1. javascript的变量的存储方式:栈(stack)和堆(heap)。
栈:自动分配内存空间,系统自动释放,里面存放的是基本类型的值和引用类型的地址
堆:动态分配的内存,大小不定,也不会自动释放。里面存放引用类型的值。
2.基本类型:赋值 赋真正的值。 引用类型:赋引用类型的地址
var num = 10
var age = 10
console.log(num == age);
var arr = [1, 2, 3]
var arr1 = [1, 2, 3]
console.log(arr == arr1);
var arr1=[1,2,3]
var arr2= arr1
arr2.push(4)
console.log(arr1);
console.log(arr2);
var arr3=[1,2,3]
var arr4=[]
for(var i=0;i<arr3.length;i++){
arr4.push(arr3[i])
}
arr4.unshift(0)
console.log(arr3);
console.log(arr4);
var arr5=[1,2,3]
var arr6=arr5.slice(0)
arr6.shift()
console.log(arr5);
console.log(arr6);
var arr7=[1,2,3]
var arr8=arr7.concat()
arr8.pop()
console.log(arr7);
console.log(arr8);
var obj1={
name:"obj1",
age: 18
}
var obj2={ }
for(x in obj1){
obj2[x]=obj1[x]
}
console.log(obj1);
console.log(obj2);
五,拷贝继承
function person(name, age) {
this.age = age
this.name = name
this.say = function () {
console.log(this.name + "会睡觉");
}
}
person.prototype.sex = "男"
person.prototype.sleep = function () {
console.log((this.name + "会睡觉"));
}
function student(code) {
this.code = code
this.study = function () {
console.log(this.name + "热爱学习");
}
}
student.prototype = new person("小明", 22)
student.prototype.height = 200
student.prototype.play = function () {
console.log("热爱游戏");
}
var stu = new student(100)
var per = new person("小明",17)
for (x in per) {
stu[x] = per[x]
}
console.log(stu.code);
stu.study()
console.log(stu.height);
stu.play()
console.log(stu.name);
stu.say()
console.log(stu.sex);
stu.sleep()