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");
複製代碼

注: 因位字符串中也有轉義字符,因此在使用構造函數定義表達式的時候,要多轉義一次。

相關文章
相關標籤/搜索