ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JS高级程序设计-第六章:面向对象的程序设计

2020-03-03 17:03:20  阅读:269  来源: 互联网

标签:name 面向对象 age JS Person job person1 程序设计 alert


对象的数据属性,可以使用Object.defineProperty 方法修改和设置。Configurable, Enumerable, Writable, Value 共四个特征描述数据属性。

        //数据属性的四个特征
        var person = {
            name: 'Nicholas'
        };
        //设置为只读属性,不可修改
        Object.defineProperty(person, 'name', {
            writable: false
        });
        // person.name = 'Jane';
        // alert(person.name)  //'Nicholas'
        //设置为不可删除特性,一旦把属性定义为不可配置,之后就不能定义为可配置了。
        Object.defineProperty(person, 'name', {
            configurable: false,
            writable: true
        });
        alert(person.name);   //'Nicholas'
        delete person.name
        alert(person.name);   //'Nicholas'

构造函数
使用构造函数实现面向对象编程。

//使用构造函数创建对象
        function Person(name, age, job) {
            this.name = name;
            this.age = age;
            this.job = job;
            this.sayName = function() {
                alert(this.name)
            }
        }
        var person1 = new Person('Nicholas', 29, 'software engineering');
        alert(person1.age);
        person1.sayName()

        //将方法放在构造函数外,避免重复创建相同函数
        function Person(name, age, job) {
            this.name = name;
            this.age = age;
            this.job = job;
            this.sayName = sayName;
        }
        function sayName() {
           alert(this.name)
        }
        var person2 = new Person('Greg', 20, 'doctor')
        person2.sayName();   //Greg
        alert(person2.job)   //doctor

理解原型对象,使用hasOwnProperty检测某一属性是否是实例的属性还是原型对象的属性。

        //使用 hasOwnProperty 方法检测属性是属于实例还是原型对象
        function Person() {};
        Person.prototype.name = 'Nic  holas';
        Person.prototype.age = 29;
        Person.prototype.job = 'software engineering';

        var person1 = new Person();
        console.log(person1.hasOwnProperty('name'));  //false
        //重新在实例中定义了name属性
        person1.name = 'Greg';
        console.log(person1.hasOwnProperty('name'));  //true
        //删除实例中的name属性
        delete person1.name ;
        console.log(person1.hasOwnProperty('name'));  //false

组合使用构造函数模式和原型模式
使用构造函数定义实例属性,用原型定义共用的方法和属性。

// 使用构造函数定义实例属性,原型对象定义共有的方法和属性
        function Person(name, age, job) {
            this.name = name;
            this.age = age;
            this.job = job;
            this.friends = ['susan', 'jane']
        }
        Person.prototype = {
            constructor: Person,
            sayName: function() {
              alert(this.name)
            }
        }
        var person1 = new Person('nicholas', 28, 'software engineering');
        var person2 = new Person('gregy', 27, 'doctor');
        person1.sayName()
        // 只改变person2的朋友,person1没有改变
        person2.friends.push('john')
        alert(person2.friends)
        alert(person1.friends)

关于用原型链实现继承的几种方式,因为现在ES6已经普及,不会再用到原型链的方式,因此没有每一段代码都执行,只是粗粗看了一遍。

在养一只虎纹� 发布了12 篇原创文章 · 获赞 1 · 访问量 197 私信 关注

标签:name,面向对象,age,JS,Person,job,person1,程序设计,alert
来源: https://blog.csdn.net/yutingwu816/article/details/104607736

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有