new 操作符
new操作符的作用
new 操作符會返回乙個物件
這個物件也就是建構函式中的 this ,可以訪問到掛載在 this 上面的任意屬性
這個物件可以訪問到建構函式原型上的屬性,所以需要將物件與建構函式鏈結起來
返回原始值需要忽略,返回物件需要正常處理
手動實現**
function
create
(con,
...args)
object.
setprototypeof
(obj, con.prototype)
let result = con.
(obj, args)
return result instanceof
object
? result : obj
}
這就是乙個手動實現new操作符的**。
步驟如下:
首先在函式接受不定量的引數,第乙個引數為建構函式,接下來的引數被建構函式使用
然後內部建立乙個新物件 obj
因為 obj 物件需要訪問到建構函式原型鏈上的屬性,所以我們通過 setprototypeof 將兩者聯絡起來,這段**等同於 obj.proto= con.prototype
將 obj 繫結到建構函式上,並且傳入剩餘的引數
判斷建構函式返回值是否為物件沒如果為物件就使用建構函式的返回的值,否則則使用 obj ,這樣就實現了忽略建構函式返回的原始值
呼叫手動建立的建構函式
function
test
(name, age)
test.prototype.
sayname
=function()
const a =
create
(test,
'lxl',25
) console.
log(a.name)
;//'lxl
console.
log(a.age)
;// 25
a.sayname()
// 'lxl'
new 操作符 呼叫建構函式實際上會經歷一下 4 個步驟:
建立乙個新物件
將建構函式的作用域賦給物件 (因此 this 就指向了這個新物件)
執行建構函式中的** (為這個新物件新增屬性)
返回新的物件
new操作符具體幹了什麼,具體就是三件事
var obj =
obj.protp = base.prototype
base.
call
(obj)
base.prototype.
tostring
=function()
1. 我們建立了乙個空物件obj
2. 將這個空物件的 __prptp__成員指向base函式物件prototype成員物件
3. 將base函式物件的this指標替換成obj,然後再呼叫base函式,於是我們就給obj物件賦值了一條個id成員變數,這個成員變數的值是 'base' 關於call函式的用法
js中的new命令
function new 建構函式 constructor,構造函式引數 params 例項 var actor new person,張三 28 函式內部可以使用new.target屬性。如果當前函式是new命令呼叫,new.target指向當前函式,否則為undefined。functionf ...
關於Js中new操作符的作用詳解
前言 js是當今時代最常用的 操作語言,其中new操作符尤為常見。對於很多 小白來說,並不清楚new在js中扮演著怎樣的角色,具體是做什麼用,幹了什麼。本文從new操作符的作用著手,簡單介紹new操作符相關知識。什麼是new?眾所周知,在js中,new的作用是通過建構函式來建立乙個例項物件。像下面這...
談談js中new的作用
function fun name fun.prototype.getnmae function let fc newfun xiaoming console.log fc.name xiaoming fc.getnmae xiaoming從上面的例子中可以得出以下結論 上面是在建構函式沒有返回值的...