最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

JS面向对象用法实例

来源:动视网 责编:小采 时间:2020-11-27 20:01:55
文档

JS面向对象用法实例

JS面向对象用法实例:对象是包含了属性和方法的集合体。什么是面向对象呢? 面向对象就是一种编程思想,是一个概念。 在js中,通过一种叫做原型的方式来实现面向对象编程。<!DOCTYPE html><html><head lang="en"> <meta
推荐度:
导读JS面向对象用法实例:对象是包含了属性和方法的集合体。什么是面向对象呢? 面向对象就是一种编程思想,是一个概念。 在js中,通过一种叫做原型的方式来实现面向对象编程。<!DOCTYPE html><html><head lang="en"> <meta


<!DOCTYPE html><html><head lang="en">
 <meta charset="UTF-8">
 <title>通过字面量来创建对象</title></head><body>
 <button type="button" onclick="showInfo();">点击显示学生信息</button><script type="text/javascript">
 var student={
 age:50,
 name:"小黑",
 address:"海淀区",
 sayHello:function(){ //方法
 document.write("姓名:"+this.name+"<br/>");
 document.write("年龄:"+this.age+"<br/>");
 document.write("住址:"+this.address+"<br/>");
 }
 } // student 我们称之为变量 =右边的{}中的数据,我们称之为 字面量!
 //用户点击按钮触发的事件
 function showInfo(){
 student.sayHello(); //调用student的方法
 } // 问题依然存在:现在只是创建了一个对象! 如果我们想创建多个 那么代码冗余!</script></body></html>

通过构造函数创建多个对象

<!DOCTYPE html><html><head lang="en">
 <meta charset="UTF-8">
 <title>通过构造函数创建多个对象</title></head><body><script type="text/javascript">
 //创建构造函数 函数名称首字母必须大写
 function Student(name,age,address){
 //声明属性并赋值
 this.name=name; this.age=age; this.address=address; //设置方法
 this.sayHello=function(){
 document.write("姓名:"+this.name+"<br/>");
 document.write("年龄:"+this.age+"<br/>");
 document.write("住址:"+this.address+"<br/>");
 }
 } //创建多个对象
 var stu1=new Student("小黑1",50,"天堂1"); var stu2=new Student("小黑2",51,"天堂2"); var stu3=new Student("小黑3",52,"天堂3"); //分别调用对象的方法
 stu1.sayHello();
 stu2.sayHello();
 stu3.sayHello(); // 所有的对象都有一个constructor属性!指向了构造函数!
 document.write("stu1.constructor指向了Student:"+(stu1.constructor==Student)+"<br>"); //instanceof 判断某个对象是否属于某个类型
 document.write("stu1属于Student吗?"+(stu1 instanceof Student)+"<br>");
 document.write("stu1属于Object吗?"+(stu1 instanceof Object)+"<br>");
 document.write("stu1属于Function吗?"+(stu1 instanceof Function)+"<br>");</script></body></html>

原型对象

注意点:
01.所有的对象都有一个constructor属性!指向了构造函数!
02.当我们创建一个函数的时候,该函数就会有一个prototype属性,
这个属性指向了 通过构造函数创建的那个原型对象!Student.prototype
03.原型对象就是内存中为其他对象提供共享属性和方法的对象!
04.prototype属性只有函数才有!
05.每个对象都有一个__proto__属性,指向了原型对象!

<!DOCTYPE html><html><head lang="en">
 <meta charset="UTF-8">
 <title>原型对象</title></head><body><script type="text/javascript">
 /*创建一个构造函数*/
 function Student(){} //通过原型对象来创建对象
 Student.prototype.name;
 Student.prototype.age;
 Student.prototype.address;
 Student.prototype.sayHello=function(){
 document.write("姓名:"+this.name+"<br/>");
 document.write("年龄:"+this.age+"<br/>");
 document.write("住址:"+this.address+"<br/>");
 } var stu1=new Student();
 stu1.name="小白";
 stu1.age=52;
 stu1.address="天上人间"; var stu2=new Student();
 stu2.sayHello(); // 验证每个对象都有一个__proto__属性,指向了原型对象!
 document.write(stu2.__proto__==Student.prototype);</script></body></html>

01.prototype属性只有函数才有!
02.每个对象都有一个__proto__属性,指向了原型对象!

<!DOCTYPE html><html><head lang="en">
 <meta charset="UTF-8">
 <title>深入原型对象</title></head><body><script type="text/javascript">
 //01.验证只有函数有prototype属性
 var a={};
 document.write(a.prototype+"<br/>");
 document.write(a.__proto__+"<br/>"); var b=function(){}
 document.write(b.prototype+"<br/>");
 document.write(b.__proto__+"<br/>"); var c=new b(); // 02.验证每个对象都有一个__proto__属性,指向了原型对象!
 document.write(c.__proto__== b.prototype);</script></body></html>

原型链

原型链:
01.一个原型对象是另一个原型对象的实例! 小猫是动物的一个实例!
02. 相关的原型链层层递进,就构成了实例和原型对象的链条,我们就称之为原型链!
蹲在角落里的那只黑猫 (实例)
继承了
猫类(01.相当于黑猫来说是原型对象 02.相对于动物来说是一个实例)
继承了
动物类(01.所有动物的原型对象 02.object的实例)
继承了
Object(所有原型对象的顶级)
只要是个对象都有__proto__属性,指向了原型对象!
问题:
Object是对象!
__proto__属性!
属性值是null!

<!DOCTYPE html><html><head lang="en">
 <meta charset="UTF-8">
 <title>原型链</title></head><body><script type="text/javascript">
 //模拟一个构造函数
 var Student=function(){}; var stu1=new Student();
 document.write(stu1.__proto__+"<br/>"); //student
 document.write(stu1.__proto__.__proto__+"<br/>");//function
 document.write(stu1.__proto__.__proto__.__proto__+"<br/>"); // object null
 document.write("===================================");
 document.write((stu1.__proto__===Object.prototype)+"<br/>"); //false
 document.write((Student.prototype.__proto__===Object.prototype)+"<br/>"); //true</script></body></html>

借用构造函数

<!DOCTYPE html><html><head lang="en">
 <meta charset="UTF-8">
 <title>借用构造函数的同时传递参数</title></head><body>

 <script type="text/javascript">
 //创建Animal的构造
 function Animal(name){
 this.name=name;
 } //创建Dog的构造
 function Dog(){
 //借用构造 传递参数
 Animal.call(this,"小黑狗"); this.age=50;
 } //创建Cat的构造
 function Cat(){
 //借用构造
 Animal.call(this,"小猫咪"); this.health=100;
 } //创建小狗的实例
 var dog1=new Dog();
 document.write(dog1.name);
 document.write(dog1.age); //创建小猫咪的实例
 var cat1=new Cat();
 document.write(cat1.name);
 document.write(cat1.health); </script></body></html>

组合继承

组合继承:
有时也叫做伪经典继承将原型链和借用构造函数的技术组合到一块,
发挥二者之长的一种继承模式使用原型链实现对原型属性和方法的继承,
而通过借用构造函数来实现对实例属性的继承

<!DOCTYPE html><html><head lang="en">
 <meta charset="UTF-8">
 <title>组合继承</title></head><body><script type="text/javascript">
 /*构造方法*/
 function Person(name){
 this.name=name; this.names=["hei","bai","pei"];
 }
 Person.prototype.sayHello=function(){
 alert(this.name);
 } function Student(name,age){
 Person.call(this,name); //继承属性 借用构造
 this.age=age;
 }
 Student.prototype=new Person();//继承了方法 原型链
 //student特有的方法
 Student.prototype.sayBey=function(){
 alert(this.name);
 } /*创建对象*/
 var stu=new Student("小黑黑",50);
 stu.names.push("小白白");
 document.write(stu.names+"<br/>");
 stu.sayHello();
 stu.sayBey(); var stu1=new Student("小黑黑2",50);
 document.write(stu1.names+"<br/>");
 stu1.sayHello();
 stu1.sayBey();</script></body></html>

文档

JS面向对象用法实例

JS面向对象用法实例:对象是包含了属性和方法的集合体。什么是面向对象呢? 面向对象就是一种编程思想,是一个概念。 在js中,通过一种叫做原型的方式来实现面向对象编程。<!DOCTYPE html><html><head lang="en"> <meta
推荐度:
标签: 使用 js 例子
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top