设为首页 加入收藏

TOP

js闭包函数(四)
2019-09-17 19:09:36 】 浏览:136
Tags:函数
th=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>变量的动态监听</title> </head> <body> <button id="btn" onclick="test()">点击</button> <p id="p">0</p> </body> <script src="test.js" charset="utf-8"></script> <script type="text/java script"> function test(){ watchVal.value = ++watchVal.value; let info = document.getElementById("p"); info.innerHTML = watchVal.value; console.log(watchVal.value); } </script> </html>

js代码如下:

// 变量监听
var watchVal = {
    value:0,
    get val(){
        console.log('取值:',this.value);
        return this.value;
    },
    set val(vals) {
        this.value = vals;
        console.log("存储之后的值",this.value);
    }
}

原型和原型链

在诸多面向对象编程语言当中,封装继承多态是必备的内容,而在js这门基于对象的编程语言身上,想要实现其诸多特性,只能
通过prototype原型来实现。

我们可以先来通过代码来简单的体验一下原型:

// 创建一个数组
var arr = [1,2,3,4];

// 打印这个数组
console.log(arr);

你可以在打印的结果中最后看到一个属性__proto__

你过你尝试着将其打印,你会发现其中包含了Array的属性和方法。

它是什么呢?

它其实就是数据arr数组的原型,而__proto__表述的其实就是数组的原型链.

你需要知道的是,在js当中,__proto__就是数据原型的代表,我们可以通过其向我们创建的数组中添加方法:

例如:

// 创建一个数组
var arr = [1,2,3,4];

// 打印这个数组
console.log(arr);

// 向数组的原型上添加一个sayHello()方法
arr.__proto__.sayHello = function(){
    console.log("hello,world!");
}

arr.sayHello();

我们在开发的过程中,更多的是采用下面的写法:

// 创建一个数组
var arr = [1,2,3,4];

// 打印这个数组
console.log(arr);

// 向数组的原型上添加一个sayHello()方法
Array.prototype.sayHello = function(){
    console.log("hello,world!");
}

arr.sayHello();

在上面的代码中,prototype同样表示着原型,只不过更多的时候是被应用在构造函数的身上。Array是数组对象的原型
,它是一个构造函数,所以可以通过这个属性来进行方法的设置。

当数据是一个构造函数的时候,prototype的使用方式还可以进行简化:


function Person(){

}

Person.prototype = {
    sayHello:function(){
        console.log(111)
    }
}


var a = new Person();
a.sayHello();

面向对象

在编程领域,面向对象是一种常见的编程范式,也被成为OOP,ECMASript支持包括结构化、面向对象、函数式、命令式等多种编程方式。

下面要说的就是面向对象编程的内容。

MDN说明:

面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式。它使用先前建立的范例,包括模块化,多态和封装几种技术。今天,许多流行的编程语言(如Java,java script,C#,C+ +,Python,PHP,Ruby和Objective-C)都支持面向对象编程(OOP)。

相对于「一个程序只是一些函数的集合,或简单的计算机指令列表。」的传统软件设计观念而言,面向对象编程可以看作是使用一系列对象相互协作的软件设计。 在 OOP 中,每个对象能够接收消息,处理数据和发送消息给其他对象。每个对象都可以被看作是一个拥有清晰角色或责任的独立小机器。

面向对象程序设计的目的是在编程中促进更好的灵活性和可维护性,在大型软件工程中广为流行。凭借其对模块化的重视,面向对象的代码开发更简单,更容易理解,相比非模块化编程方法, 它能更直接地分析, 编码和理解复杂的情况和过程。

面向对象编程术语:

Namespace 命名空间
    允许开发人员在一个独特,应用相关的名字的名称下捆绑所有功能的容器。
Class 类
    定义对象的特征。它是对象的属性和方法的模板定义。
Object 对象
    类的一个实例。
Property 属性
    对象的特征,比如颜色。
Method 方法
    对象的能力,比如行走。
Constructor 构造函数
    对象初始化的瞬间,被调用的方法。通常它的名字与包含它的类一致。
Inheritance 继承
    一个类可以继承另一个类的特征。
Encapsulation 封装
    一种把数据和相关的方法绑定在一起使用的方法。
Abstraction 抽象
    结合复杂的继承,方法,属性的对象能够模拟现实的模型。
Polymorphism 多态
    多意为「许多」,态意为「形态」。不同类可以定义相同的方法或属性。

JS当中的命名空间

命名空间是一个容器,它允许开发人员在一个独特的,特定于应用程序的名称下捆绑所有的功能。 在java script中,命名空间只是另一个包含方法,属性,对象的对象。

创造的java script命名空间背后的想法很简单:一个全局对象被创建,所有的变量,方法和功能成为该对象的属性。使用命名空间也最大程度地减少应用程序的名称冲突的可能性。

例如:
我们来创建一个全局变量叫做 MYAPP

// 全局命名空间
var MYAPP = MYAPP || {};

在上面的代码示例中,我们首先检查MYAPP是否已经被定义(是否在同一文件中或在另一文件)。如果是的话,那么使用现有的MYAPP全局对象,否则,创建一个名为MYAPP的空对象用来封装方法,函数,变量和对象。

我们也可以创建子命名空间:

// 子命名空间
MYAPP.event = {};

下面是用于创建命名空间和添加变量,函数和方法的代码写法:

// 给普通方法和属性创建一个叫
首页 上一页 1 2 3 4 5 6 下一页 尾页 4/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇全面分析前端的网络请求方式 下一篇微信小程序-强制手机端更新

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目