填寫內容讓下面**支援a.name = 「name1」; b.name = 「name2」;
function
obj(name)
obj. prototype.name = "name2";
var a = obj("name1");
var b = new obj;
關於本題有以下兩種答案
方法1: if(name); obj.name = 「name1」; return obj; } 推薦使用
方法2: if(name) return this;
從結果來看,兩種方法都是可行的。
這裡先做區分:
1.this
this物件 引用的是函式據以執行的環境物件。
在全域性作用域中呼叫函式,this指向window;當函式被作為某個物件的方法呼叫時,this指向 此物件;
匿名函式的執行環境具有全域性性,其this物件通常指向window。
通過將外部作用域的this物件儲存到乙個閉包可以訪問的變數裡
閉包,可以讓閉包訪問非全域性變數的值。
2.prototype
(1)原型物件、建構函式、物件例項之間的關係:
建立新函式,會根據一組特定的規則為該函式建立乙個prototype屬性,該屬性指向函式的原型物件;
預設情況下,所有原型物件會自己動獲取乙個constructor屬性,該屬性指向prototype屬性所在函式;
呼叫建構函式建立新例項,該例項內部包含乙個內部屬性[[prototype]]指向建構函式的原型物件。
注意:
連線存在於例項與建構函式的原型物件之間,而不是存在於例項與建構函式之間。
(2)屬性搜尋
設定原型物件屬性:
object.prototype.prototypename=prototypevalue;
為物件例項新增
屬性:object.propertyname=propertyvalue;
為物件例項新增乙個屬性時,這個屬性會遮蔽原型物件中儲存的同名屬性。
3.使用new操作符呼叫函式建立例項的執行步驟
(1)建立乙個新物件;
(2)將函式的作用域賦給新物件(this指向新物件);
(3)執行函式中的**;
(4)返回新物件。
推薦使用方法一,方法2並不妥:不使用new普通呼叫函式時,在非嚴格模式下,this是繫結到全域性物件window物件上的,因此方法2中this.name是在windiw物件上新增name屬性,並把window物件返回。因此a實際上是windiw物件的引用,a.name就是在window物件上查詢name變數,因為在window物件上賦值了當然是可以查詢到name變數的。 一般要避免汙染全域性變數,在這裡其實應該避免。 而方法1,建立了乙個新物件,並返回這個新物件,減少了全域性變數的建立,更可取。
「`
String建立物件的兩種方式
用string建立物件有兩種方式 第一種為直接賦值,string 物件名 字串 例如 string name tom 第二種為new構造方法,string 物件名 new string 字串 例如string name new string tom public class test 執行結果為tu...
C 中物件建立的兩種方式
在c 中,類的物件建立分為兩種,一種是靜態建立,如a a 另一種是動態建立,如a ptr new a 這兩種方式是有區別的。靜態建立乙個類物件,是由編譯器為物件在棧空間中分配記憶體,是通過直接移動棧頂指標,挪出適當的空間,然後在這片記憶體空間上呼叫建構函式形成乙個棧物件。使用這種方法,直接呼叫類的建...
執行緒建立的兩種方式
建立執行緒的兩種方式 1.繼承thread並重寫方法,在run方法中定義執行緒要執行的任務 class mythread extends thread public class threaddemo1 2.實現runable介面並重寫run方法 class myrunnable implements...