JS tidak mempunyai warisan, tetapi ia boleh menyelamatkan negara dengan menggunakan pembina, prototaip dan kaedah lain untuk merealisasikan fungsi warisan.
Malah, menginstant objek menggunakan pembina adalah warisan Semua sifat dan kaedah dalam Objek boleh digunakan di sini. Jadi mengapa anda boleh mengakses kaedah objek Objek Sebenarnya, anda mengakses kaedah objek prototaipnya Semua kaedah diletakkan dalam prototaip dan bukannya kelas.
1 2 3 4 5 | console.log(o.__proto__ === Object.prototype)
console.log(o.__proto__ === Object);
console.log(Object.__proto__ === Function.prototype);
console.log(Function.prototype.__proto__ === Object.prototype);
console.log(Number.__proto__ === Function.prototype);
|
Salin selepas log masuk
Objek ialah moyang kepada semua benda.
1. Objek terbina dalam semuanya diwarisi daripada objek
1 | var myNumber = new Number(10);
|
Salin selepas log masuk
Objek rentetan sebenarnya ialah instantiasi objek Rentetan
Selain mengakses kaedah atributnya sendiri, anda juga boleh mengakses kaedah atribut kelas induk
1 2 3 | console.log(s.toUpperCase());
console.log(s.toString());
|
Salin selepas log masuk
2. Pewarisan objek tersuai
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | var Person = function (){
this .name= 'AV老师' ;
this .test= '测试中的毕福剑' ;
}
Person.prototype={
say: function (){
console.log( '呀买碟' );
}
}
var Canglaoshi = function (name,age,cup){
this .name=name;
this .age=age;
this .cup=cup;
}
Canglaoshi.prototype= new Person();
Canglaoshi.prototype.ppp= function (){
console.log( '啪啪啪' );
}
var xiaocang= new Canglaoshi( '空空' ,18, 'E' );
xiaocang.say();
console.log(xiaocang.name);
console.log(xiaocang.age);
console.log(xiaocang.cup);
console.log(xiaocang.test);
|
Salin selepas log masuk
3. Demonstrasi rantaian prototaip warisan objek tersuai
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | ( function () {
function SuperParent() {
this .name = 'mike' ;
}
function Parent() {
this .age = 12;
}
Parent.prototype = new SuperParent();
var parent = new Parent();
console.log( "测试父亲可以访问爷爷属性:" + parent.name);
console.log( "测试父亲可以访问自己的属性:" + parent.age);
function Child() {
this .weight = 60;
}
Child.prototype = new Parent();
var child = new Child();
console.log( "测试儿子可以访问爷爷的属性:" + child.name);
console.log( "测试儿子可以访问父亲的属性:" + child.age);
console.log( "测试儿子可以访问自己独特的属性:" + child.weight);
var test = new SuperParent();
console.log(test.name);
console.log(test.toString());
console.log(child.name);
})()
|
Salin selepas log masuk
4. Warisan Pembina
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ( function () {
function People() {
this .race = '人类' ;
}
People.prototype = {
eat: function () {
alert( '吃吃吃' );
}
}
function Shemale(name, skin) {
People.apply( this , arguments);
this .name = name;
this .skin = skin;
}
var zhangsan = new Shemale( '张三' , '黄皮肤' )
console.log(zhangsan.name);
console.log(zhangsan.skin);
console.log(zhangsan.race);
})()
|
Salin selepas log masuk
5. Warisan gabungan
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ( function () {
function Person(name, age) {
this .name = name;
this .age = age;
}
Person.prototype.say = function () {}
function Man(name, age, no) {
Person.call( this , name, age);
this .no = no;
}
Man.prototype = new Person();
var man = new Man( "张三" , 11, "0001" );
console.log(man.name);
console.log(man.age);
console.log(man.no);
})()
|
Salin selepas log masuk
6. Salin harta pusaka
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <script>
+( function () {
var Chinese = {
nation: '中国'
};
var Doctor = {
career: '医生'
};
function extend(p) {
var c = {};
for ( var i in p) {
c[i] = p[i];
}
c.uber = p;
return c;
}
var Doctor = extend(Chinese);
Doctor.career = '医生' ;
alert(Doctor.nation);
})()
</script>
|
Salin selepas log masuk
7. Warisan gabungan parasit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <script>
+( function () {
function inheritPrototype(subType, superType) {
var prototype = Object(superType.prototype);
prototype.constructor = subType;
subType.prototype = prototype;
}
function Person(name) {
this .name = name;
}
Person.prototype.say = function () {}
function Student(name, age) {
Person.call( this , name);
this .age = age;
}
inheritPrototype(Student, Person);
var xiaozhang = new Student( '小张' , 20);
console.log(xiaozhang.name)
})()
</script>
|
Salin selepas log masuk
8. Gunakan rangka kerja pihak ketiga untuk melaksanakan warisan
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <script src= 'simple.js' ></script>
<!-- 使用的第三方框架simple.js -->
<script>
+( function () { < script >
var Person = Class.extend({
init: function (age, name) {
this .age = age;
this .name = name;
},
ppp: function () {
alert( "你懂的" );
}
});
var Man = Person.extend({
init: function (age, name, height) {
this ._super(age, name);
this .height = height;
},
ppp: function () {
this ._super();
alert( "好害羞 -,- " );
}
});
var xiaozhang = new Man(21, '小张' , '121' );
xiaozhang.ppp();
})()
|
Salin selepas log masuk
Saya harap ia akan membantu semua orang untuk mempelajari pengaturcaraan javascript.