这是我参与更文挑战的第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);
// 原型的做用: 实例共享方法
// 构造函数的方法要写在原型上
复制代码
该方法是检测某个方法是否在构造函数中函数
举例: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 构造函数
复制代码
ECMAScript核心语法添加的内置构造函数:
Object、 Array、 Function、 String、 Number、 Boolean、 RegExp、 Date、 Error
复制代码
该构造函数用于定义函数
使用方式:
接受任意个字符串参数,除了最后一个都是形参
举例:
var fun = new Function("a", "b", "return a + b");
复制代码
输出fun:
等价方式1:
var fun = function() {
return a + b;
}
复制代码
等价方式2:
function fun() {
return a + b;
}
复制代码
特色: 若是使用new Function获得的函数, 经过函数.name 获得的anonymous
若是使用函数声明式或者函数表达式打点调用name获得的是变量名称
函数有一个length属性,表示的是函数在定义的时候形参的个数
argument.length,表示的是函数在执行的时候实参的个数
复制代码
该构造函数用于定义正则表达式
使用方式:接受两个参数
第一个参数:字符串,定义正则表达式的表达体
第二个参数: 字符串,正则表达式的修饰符 i、 g、 m
举例:
// RegExp
var reg = /\s/g;
var reg1 = new RegExp("\\s", "g");
复制代码
注: 因位字符串中也有转义字符,因此在使用构造函数定义表达式的时候,要多转义一次。