zoukankan      html  css  js  c++  java
  • JS面向对象编程

    JavaScript不区分类和实例的概念,而是通过原型(prototype)来实现面向对象编程。

    原型是指我们想要创建xiaoming这个具体的学生时,我们并没有一个student类型可用,那怎么办?恰好有这么一个现成的对象:

        var robot = {
                name:'Robot',
                height:1.6,
                run:function(){
                    console.log(this.name+'is running...');
                }
            };

    我们可以把它改名为student,然后创建出小明:

         var Student = {
                name:'Robot',
                height:1.6,
                run:function(){
                    console.log(this.name+'is running...');
                }
            };
    
            var xiaoming={
                name:"小明"
            };
    
            xiaoming._proto_=Student;

    最后一行代码把xiaoming的原型指向了对象Student,看上去xiaoming仿佛是从Student继承下来的:

          xiaoming.name;//'小明'
            xiaoming.run();//小明is running...

    xiaoming有自己的name属性,但是并没有定义run()方法,不过,由于小明是从Student继承而来,只要Student有run()方法,小明也可以调用:

    JavaScript的原型链和java的Class区别就在于,它没有Class的概念,所有对象都是实例,所谓继承关系不过是把一个对象的原型指向另一个对象而已。

    如果你把xiaoming的原型指向其他对象

    var Bird = {
        fly: function () {
            console.log(this.name + ' is flying...');
        }
    };
    
    xiaoming.__proto__ = Bird;

    现在的xiaoming已经无法run()了,他已经变成了一只鸟:

    xiaoming.fly();//小明 is flying...
    

     在JavaScript代码运行时期,你可以把xiaoming熊student变成bird,或者变成任何对象。

    在编写JavaScript时,不要直接用obj._proto_去改变一个对象的原型,并且,低版本的IE页无法使用_proto_。Object.create()方法可以传入一个原型对象,并创建一个基于该原型的新对象,但是新对象什么属性都没有,因此,我们可以编写一个函数来创建xiaoming:

        //原型对象:
            var Student = {
                name:'Robot',
                height:1.2,
                run:function(){
                    console.log(this.name+'is running...');
                }
            };
    
            function createStudent(name){
                //基于Student原型创建一个新对象:
                var s = Object.create(Student);
                //初始化对象
                s.name=name;
                return s;
            }
    
            var xiaoming=createStudent('小明');
            xiaoming.run();//小明 is running...
            xiaoming._protp_===Student;//true
  • 相关阅读:
    读GNU官方的Make manual
    GNU LD之一LMA和VMA
    GNU LD之二LD script
    gcc 库的链接顺序问题
    GDB远程连接RX Probe在线debug程序
    mips gnu工具使用
    read PSE TPS2384 POE Firmware Guide
    adult道具项目开发
    2、与网络相关的命令 netstat , tcpdump 等。
    1、与 CPU、 内存、 磁盘相关的命令
  • 原文地址:https://www.cnblogs.com/yuanxinru321/p/7726377.html
Copyright © 2011-2022 走看看