關於建立物件的兩種方式

2021-08-02 08:36:55 字數 1551 閱讀 5682

填寫內容讓下面**支援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...