Javascript复习第五天

这是我参与更文挑战的第6天,活动详情查看:更文挑战程序员

原型

每个函数都有一个prototype属性,它的值是一个对象正则表达式

对于普通函数来讲, 它的做用不大安全

可是对于构造函数,做用:实例共享方法markdown

举例:app

// 定义构造函数
function People(name, age, sex) {
	this.name = name;
	this.age = age;
	this.sex = sex;
}

// 其实咱们使用布兰达艾奇 为咱们提供的People.prototype属性添加方法,而且也不须要在函数中定义函数名
People.prototype.say = function() {
	console.log("你好");
}

// 实例化对象
var xiaoming = new People("小明", 12, "男");
var xiaohong = new People("小红", 12, "女");
xiaoming.say();
xiaohong.say();


console.log(xiaoming.say === xiaohong.say);
// 原型的做用: 实例共享方法
// 构造函数的方法要写在原型上
复制代码

hasOwnProperty

该方法是检测某个方法是否在构造函数中函数

举例:post

// 定义一个构造函数
function People(name, age, sex) {
	this.name = name;
	this.age = age;
	this.sex = sex;
	this.say = function() {
		console.log("你好");
	}
}

// 方法写在原型上
People.prototype.intro = function() {
	console.log("你们好, 我今年" + this.age + "岁了");
}


// 实例化对象
var xiaoming = new People("小明", 12, "男");
var xiaohong = new People("小红", 12, "女");
xiaoming.say();
xiaoming.intro();
xiaohong.say();
xiaohong.intro();

// 一样是方法, 如何区别方法是在构造函数中仍是在原型上?
console.log(xiaoming.hasOwnProperty("say") ? "say在身上" : "say不在身上");
console.log(xiaohong.hasOwnProperty("intro") ? "intro在身上" : "intro不在身上");
复制代码

安全类

定义: 不管外部如何调用类, 获得的都是一个类的实例化对象ui

解决问题: 有些程序员,不使用new来调用构造函数,可能致使代码出现一些问题this

举例:spa

function People(name, age, sex) {
	// 判断this指向谁,从而决定代码如何执行
	if (this === window) {
        // 说明没有使用new来调用,而是当作普通函数来调用,若是一个普通函数中想要返回内容,须要使用return
		return new People(name, age, sex);
	} else {
		// 说明使用new 来调用函数 
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
}
复制代码

继承

子类继承父类的属性和方法

继承分为三种:

1 类式继承

2 构造函数式继承

3 组合式继承

类式继承

// 定义父类
function People() {
}
People.prototype.sayHello = function(){}
// 定义子类
function Student() {
}
// 继承
Student.prototype = new People();
// 注意补回constructor属性
Student.prototype.constructor = Student;
复制代码

构造函数式继承

注:其实跟继承不要紧

// 定义父类
function People(name, age, sex) {
   this.name = name;
   this.age = age;
   This.sex = sex;
}
People.prototype.sayHello = function(){}
// 定义子类
function Student(name, age, sex, grade) {
   People.apply(this, arguments);
   // 新属性的继承代码必定要放在下方
 this.grade = grade;
}
复制代码

组合式继承

构造函数式继承 + 类式继承

instanceof

该关键字用于断定某一个对象是不是某一个构造函数的实例

使用方式:

对象  instanceof 构造函数
复制代码

内置构造函数

内置构造函数的分类

ECMAScript核心语法添加的内置构造函数:

Object、 Array、 Function、 String、 Number、 Boolean、 RegExp、 Date、 Error
复制代码

Function

该构造函数用于定义函数

使用方式:

接受任意个字符串参数,除了最后一个都是形参

举例:

var fun = new Function("a", "b", "return a + b");
复制代码

输出fun:

图片14.png

等价方式1:

var fun = function() {
    return a + b;
}
复制代码

等价方式2:

function fun() {
   return a + b;
}
复制代码

特色: 若是使用new Function获得的函数, 经过函数.name 获得的anonymous

若是使用函数声明式或者函数表达式打点调用name获得的是变量名称

函数有一个length属性,表示的是函数在定义的时候形参的个数
argument.length,表示的是函数在执行的时候实参的个数
复制代码

RegExp

该构造函数用于定义正则表达式

使用方式:接受两个参数

第一个参数:字符串,定义正则表达式的表达体

第二个参数: 字符串,正则表达式的修饰符 i、 g、 m

举例:

// RegExp
var reg = /\s/g;
var reg1 = new RegExp("\\s", "g");
复制代码

注: 因位字符串中也有转义字符,因此在使用构造函数定义表达式的时候,要多转义一次。

相关文章
相关标签/搜索