JS 建立唯讀屬性

2022-08-18 20:48:12 字數 2266 閱讀 3871

這種方式可以建立 「偽」 唯讀屬性。這並不是一種好方法,因為使用_函式_獲得唯讀的_屬性_不太符合一般的邏輯。

/**

* represent a used car.

* * @constructor

*/function car() miles

*/self.drive = function(miles) ;

/*** get a protected odometer reading

** @return

*/self.get_odometer = function() ;

}var subaru = new car();

subaru.drive(500);

subaru.get_odometer(); // 500

使用 ecmascript 5 的新特性靈活地定義變數。

/**

* represent a used car.

* * @constructor

*/function car() miles

*/self.drive = function(miles) ;

/*** get a protected odometer reading

** @return

*/object.defineproperties(this,

}});

}var subaru = new car();

subaru.drive(500);

subaru.odometer; // 500

subaru.odometer = 0; // does nothing

subaru.odometer; // 500

雖然類是 function 的語法糖,但定義類時無法像 function 一樣定義私有變數(constructor 中定義的變數都是公有變數),所以這裡需要用到用到類欄位宣告。

類欄位宣告是 tc39 提出的新語法,現在只進行到階段 3 候選階段(到階段 4 完成這個語法才算是準備好將包括在 es 規範中),所以下面的**需要用 babel 轉換成舊語法才可以使用。

/**

* represent a used car.

* * @constructor

*/class car

}var subaru = new car();

subaru.odometer; // 500

subaru.odometer = 0; // typeerror: cannot set property odometer of #which has only a getter

通過分析轉換為 es5 的原始碼可以看出,其實get方法本質還是使用了object.defineproperty,私有變數使用了weekmap進行儲存。

// babel 轉換後的**

"use strict";

function _instanceof(left, right) else

}function _classcallcheck(instance, constructor)

}function _defineproperties(target, props)

}function _createclass(constructor, protoprops, staticprops)

function _classprivatefieldget(receiver, privatemap)

var descriptor = privatemap.get(receiver);

if (descriptor.get)

return descriptor.value;

}var car =

/*#__pure__*/

(function() );

}_createclass(car, [

}]);

return car;

})();

var _odometer = new weakmap();

var subaru = new car();

subaru.odometer; // 500

subaru.odometer = 0; // typeerror: cannot set property odometer of #which has only a getter

建立唯讀使用者

1.建立乙個使用者名為readonly密碼為123456的使用者 create user readonly with encrypted password 123456 2.更新使用者預設為唯讀事務 alter user readonly set default transaction read o...

唯讀屬性的賦值

背景 今天接觸到使用smtp傳送郵件的 其中一段是關於郵件新增附件的,的內容如下 add time stamp information for the file.contentdisposition disposition data.contentdisposition disposition.cr...

怎麼實現唯讀屬性

方法一 物件私有化 usr bin env python coding utf 8 author jia shilin class person object def init self,x self.age 20 def get age self return self.age a person ...