面向对象编程

        在写代码的过程中常常需要面向对象编程,这个也是js比较重要的点,接下来就附上一段关于面向对象编程的代码,共同学习,一起进步。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>面向对象编程</title>
</head>
<body>
    <script>
        function Book(name,page,auth){
            this.name = name;
            this.page = page;
            this.auth = auth;
        }
        // 基于原型
        Book.prototype.reading = function(user) {
            console.log(`${user}读${this.name}`);
        }
        let book = new Book('数据结构',100,'拖拉机')
        console.log(book.auth);
        book.reading('xxxx');

        // 我们可以用 ES2015 把语法简化,如下所示
        class BookTwo{
            constructor(name,page,auth){
                this.name = name;
                this.page = page;
                this.auth = auth;
            }
            reading(user){
                console.log(`${user}读${this.name}`);
            }
        }
        let book2 = new BookTwo('数据结构',100,'拖拉机')
        console.log(book2.auth);
        book2.reading('xxxx')

        /* 
        我们可以用 extends 关键字扩展一个类并继承它的行为(行{1})。在构造函数中,我们也
        可以通过 super 关键字引用父类的构造函数(行{2})。
        尽管在 JavaScript 中声明类的新方式所用的语法与 Java、C、C++等其他编程语言很类似,但
        JavaScript 面向对象编程还是基于原型实现的。
        */
        // 继承
        class ItBook extends Book{
            constructor(name,page,auth,type){
                super(name,page,auth)
                this.type = type;
            }
            payPrace(prace){
                console.log(`${this.name}花了¥${prace}购买${this.type}类型的书`);
            }
        }
        let book3 = new ItBook('数据结构',100,'拖拉机','it')
        console.log(book3.type);
        book3.payPrace(100);


        //  使用属性存取器
        /* 
        ES2015 也可以为类属性创建存取器函数。虽然不像其他面向对象语言(封装概念),类的属
        性不是私有的,但最好还是遵循一种命名模式。
        下面的例子是一个声明了 get 和 set 函数的类。
        */

        class Person {
            constructor(name){
                this._name = name;  // {1}
            }
            get name(){
                return this._name;  // {2}
            }
            set name(value){  // {3}
                this._name = value;
            }
        }

        let xiaoming = new Person('小明')
        console.log(xiaoming._name,xiaoming.name); // {4}  小明 小明
        xiaoming.name = '小红'; // {5}  
        console.log(xiaoming._name,xiaoming.name);  // 小红 小红
        xiaoming._name = '老王'; // {6}
        console.log(xiaoming._name,xiaoming.name); // 老王 老王

        /* 
        要声明 get 和 set 函数,只需要在我们要暴露和使用的函数名前面加上 get 或 set 关键字
        (行{2}和行{3})。我们可以用相同的名字声明类属性,或者在属性名前面加下划线(行{1}),
        让这个属性看起来像是私有的。
        然后,只要像普通的属性一样,引用它们的名字(行{4}和行{5}),就可以执行 get 和 set
        函数了。
        _name 并非真正的私有属性,我们仍然可以引用它(行{6})。
        */
    </script>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhuaaaa3944210

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值