js物件導向的一些小練習

2021-07-30 12:27:04 字數 2210 閱讀 3986

今天來說一下js物件導向的小練習,廢話不多說直接上練習,如果你能做出這個練習,說明你對js物件的一些知識已經很清晰了

一、**

function

foo();

return this;

}foo.getname = function

();foo.

prototype.getname=function

() ;

var getname = function

();function

getname

()// 寫出下面的結果

// 1 foo.getname();

// 2 getname();

// 3 foo().getname();

// 4 new foo.getname();

// 5 new foo().getname();

// 6 new new foo().getname();

怎麼樣你已經知道答案了麼?

二、具體分析

1.foo.getname(); 結果 彈出 2

分析:這個應該很簡單,直接執行foo.getname 函式表示式。

2.getname(); 結果 4 ,這個不難

分析:這裡有一些知識點,我來詳細的說一下,

① 當變數名字(沒有賦值的情況下)和 函式名相同時,優先讀取函式,也就是:

var getname

function

getname

()getname

();//結果會是5

3.foo().getname(); 結果 1

這一塊知識點比較多,我們來慢慢分析。

foo() 函式執行完時,因為foo()函式中返回了this, 當執行完時,foo函式內的資料就暴露在了全域性環境下,所以 返回的this 也就是foo()指的是window,

那麼你可能會說 在window下getname 函式有兩個呀

getname = function

();var getname = function

();

為啥不彈出 4, 原因在於var宣告的變數被提公升了,而 沒有用var宣告的變數沒有被提公升(屬於全域性變數),其次,函式中如果用var 宣告的變數,它的作用域是在函式內的,這裡沒有用var 宣告getname 函式表示式,所以foo().getname() 結果為1 ;

4.new foo.getname(); 結果 2

這個結果不知道你有沒有想對,對於這個結果首先我們需要知道 new 操作符背後做了些什麼。可以看一看我以前的文章

其實在用new 操作符建立物件時,它背後給我們做的一些工作類似於:

var obj1= (function

(); //建立乙個新物件

o.__proto__=obj.prototype; //將新物件的原型鏈指向obj的原型

obj.call(o,"hello") //執行obj函式,將o物件指標指向obj函式,及o擁有了obj原型的屬性和方法(引用)

return o;

})()

這裡new 出來的建構函式,會繼承例項的原型上邊的所有屬性和方法。②這裡生成的建構函式是foo.getname的建構函式,如果你不信,可以自己手動為foo.getname的原型新增乙個屬性或方法(例如: foo.getname.prototype.name = 4;),然後讓後利用建立的建構函式去訪問。

var ac =

new foo.getname();

console.

log(ac.name) // 4

5.new foo().getname(); 結果是 3;

如果你上邊的結果看懂了,那麼這個你將很容易明白。這裡和上邊的唯一區別就是 函式 foo 加了括號,這這個區別就改變了建構函式的例項,上邊構造出來的函式的例項是foo.getname,而這個建構函式的例項是foo函式。

這裡new foo().getname();的寫法 其實就相當於:

var a = new foo();

a.getname();

關於javaSE物件導向的一些小知識

一 物件導向 1 物件導向 是基於面向過程的一種思想。面向過程 以函式為基礎,關注實現過程,強調功能行為。物件導向 以物件為基礎,關注實現結果,強調具備了功能的物件。2,物件導向的思想特點 a 是一種更符合人們思考習慣的思想 b 把複雜的事情簡單化 c 把我們從執行者變成了指揮者。封裝 繼承多型 3...

7 15的一些小練習

使用turtle庫,繪製乙個八邊形。圖形如下所示 import turtle as t t.setup 800,600 t.pensize 5 t.seth 22.5 t.pencolor black t.circle 80,steps 8 t.done 使用turtle庫,繪製乙個八角圖形。圖形如...

php物件導向程式設計的一些小問題

1 empty檢查物件屬性是否為空 有這樣乙個類 class cytest private val function construct val this val val function get name return this name function getv return this val...