剛學建構函式和他的例項以及一系列方法真的搞了好久才明白。
首先要明白實質上屬性和方法是一樣的,方法是屬性為引用型的函式。
內部方法
定義在函式內部的方法,內部方法只能被內部的方法呼叫
function
person()
} console.
log(work)
//work is not defined
靜態方法
靜態方法:是直接在建構函式上定義的方法,不能被例項呼叫,自身可以呼叫
function
person()
person.
sing
=function()
var p=
newperson()
p.main=
'sss'
//給例項新增屬性
console.
log(p.main)
//sss
person.
sing()
//singing
p.sing()
//報錯:bauncaught typeerror: p.sing is not a function
原型方法
通過prototype屬性在建構函式上新增的方法
function
person()
person.
sing
=function()
person.prototype.
eat=
function()
var p=
newperson()
person.prototype.
eat(
)//eating
p.eat(
)//eating
例項方法
因為在建構函式中this指向的是他的例項物件,所以定義在this中的變數和方法,只有例項才能訪問到,無法通過建構函式直接呼叫。
function
person
(name,age)
console.
log(
this
)//person
}var p=
newperson
('lily',20
) console.
log(p.name,p.age)
//lily 20
p.dance()
//dancing
person.
dance()
//uncaught typeerror: person.dance is not a function
綜合來看一下這些方法的使用吧
function
person
(name,age)
varfn
=function
(a,b)
var obj=
} console.
log(obj.
fn2())
//3}
person.
sing
=function()
person.prototype.
eat=
function()
var p=
newperson
('lily',20
)//構造例項
console.
log(p.name,p.age)
//lily 20
person.prototype.
eat(
)//eating
p.eat(
)//eating
p.main=
'sss'
//例項屬性
console.
log(p.main)
//sss
p.sing
=function()
p.sing()
//sing
person.
sing()
//singing
js中例項方法 靜態方法和原型方法詳解
之前一直以為建構函式可以直接訪問原型方法,是錯的,現在說一下 建構函式中this上新增的成員 在cat構造方法裡面,定義在this中的變數和方法,只有例項才能訪問到 如this.name,this.move,this.eat這些都是例項擁有,無法通過cat直接呼叫。function cat name...
js中例項方法 靜態方法
person.say function person.say 正常執行 var carl newperson carl.say 報錯我們給person這個類新增了乙個say方法,它在類上面的,所以,它實際上是乙個靜態方法.靜態方法 不能在類的例項上呼叫靜態方法,而應該通過類本身呼叫。類 class ...
理解js的原型鏈及繼承方法
一.認識原型鏈 js的建構函式 在es6之前沒有class關鍵字,使用建構函式來例項化乙個物件,建構函式方式方法首字母需要大寫,如下 function getmsg name,age 我們使用new關鍵字去例項化這個物件 const msg new getmsg tom 18 每次new乙個物件都會...