Rumah  >  Artikel  >  hujung hadapan web  >  Penjelasan terperinci tentang kemahiran programming_javascript berorientasikan objek JS

Penjelasan terperinci tentang kemahiran programming_javascript berorientasikan objek JS

WBOY
WBOYasal
2016-05-16 15:18:351291semak imbas

Oleh kerana JavaScript adalah berdasarkan prototaip dan tidak mempunyai konsep kelas (ES6 memilikinya, mari kita tidak bercakap mengenainya buat masa ini), semua yang kita ada akses kepada objek, dan semuanya benar-benar objek

Jadi apabila kita bercakap tentang objek, ia adalah agak kabur, ramai pelajar akan mengelirukan konsep objek dan objek itu sendiri. Kami tidak akan menyebut objek dalam terminologi berikut 🎜>

Kaedah 1

Kelas (simulasi fungsi)

function Person(name,id){
 //实例变量可以被继承
 this.name = name;
 //私有变量无法被继承
 var id = id;
 //私有函数无法被继承
 function speak(){
  alert("person1");
 }
}
//静态变量,无法被继承
Person.age = 18;
//公有函数可以被继承
Person.prototype.say = function(){
 alert("person2");
}
Warisi dan panggil kaedah kelas induk

function Person(name,id){
 //实例变量可以被继承
 this.name = name;
 //私有变量无法被继承
 var id = id;
 //私有函数无法被继承
 function speak(){
  alert("person1");
 }
}
//静态变量,无法被继承
Person.age = 18;
//公有静态成员可被继承
Person.prototype.sex = "男";
//公有静态函数可以被继承
Person.prototype.say = function(){
 alert("person2");
}
//创建子类
function Student(){
}
//继承person
Student.prototype = new Person("iwen",1);
//修改因继承导致的constructor变化
Student.prototype.constructor = Student;
var s = new Student();
alert(s.name);//iwen
alert(s instanceof Person);//true
s.say();//person2
Warisi, ganti kaedah kelas induk dan laksana super()

function Person(name,id){
 //实例变量可以被继承
 this.name = name;
 //私有变量无法被继承
 var id = id;
 //私有函数无法被继承
 function speak(){
  alert("person1");
 }
}
//静态变量,无法被继承
Person.age = 18;
//公有静态成员可被继承
Person.prototype.sex = "男";
//公有静态函数可以被继承
Person.prototype.say = function(){
 alert("person2");
}
//创建子类
function Student(){
}
//继承person
Student.prototype = new Person("iwen",1);
//修改因继承导致的constructor变化
Student.prototype.constructor = Student;
//保存父类的引用
var superPerson = Student.prototype.say;
//复写父类的方法
Student.prototype.say = function(){
 //调用父类的方法
 superPerson.call(this);
 alert("Student");
}
//创建实例测试
var s = new Student();
alert(s instanceof Person);//true
s.say();//person2 student

Fungsi berkapsul yang diwarisi

function extend(Child, Parent) {

    var F = function(){};
    F.prototype = Parent.prototype;
    Child.prototype = new F();
    Child.prototype.constructor = Child;
    Child.uber = Parent.prototype;
  }

uber bermaksud menetapkan atribut uber untuk objek anak, yang secara langsung menghala ke atribut prototaip objek induk. (Uber ialah perkataan Jerman yang bermaksud "naik" atau "satu tahap ke atas.") Ini bersamaan dengan membuka saluran pada objek anak dan anda boleh menghubungi terus kaedah objek induk. Barisan ini diletakkan di sini hanya untuk mencapai kesempurnaan warisan dan semata-mata untuk tujuan sandaran.

Kaedah 2

Bersamaan dengan menyalin, objek yang anda ingin warisi dibawa melalui objek _ini yang ditakrifkan Dalam kes ini, pewarisan boleh dicapai dengan lulus _ini, yang lebih mudah difahami daripada di atas

.

//创建父类
function Person(name,id){
 //创建一个对象来承载父类所有公有东西
 //也就是说_this承载的对象才会被传递给子类
 var _this = {};
 _this.name = name;
 //这样的是不会传递下去的
 this.id = id;
 //承载方法
 _this.say = function(){
  alert("Person");
 }
 //返回_this对象
 return _this;
}
//子类
function Student(){
 //获取person的_this对象,从而模仿继承
 var _this = Person("iwne",1);
 //保存父类的_this引用
 var superPerson = _this.say;
 //复写父类的方法
 _this.say = function(){
  //执行父类的say
  superPerson.call(_this);
  alert("Student");
 }
 return _this;
}
var s = new Student();
s.say();
Saya harap ia akan membantu semua orang untuk mempelajari pengaturcaraan javascript.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn