Skip to content

Commit b005e96

Browse files
committed
Add binding for Object.getOwnPropertyDescriptor()
1 parent 2d5d485 commit b005e96

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

crates/js-sys/src/lib.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2022,6 +2022,15 @@ extern "C" {
20222022
#[wasm_bindgen(static_method_of = Object)]
20232023
pub fn freeze(value: &Object) -> Object;
20242024

2025+
/// The Object.getOwnPropertyDescriptor() method returns a
2026+
/// property descriptor for an own property (that is, one directly
2027+
/// present on an object and not in the object's prototype chain)
2028+
/// of a given object.
2029+
///
2030+
/// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor)
2031+
#[wasm_bindgen(static_method_of = Object, js_name = getOwnPropertyDescriptor)]
2032+
pub fn get_own_property_descriptor(obj: &Object, prop: &JsValue) -> JsValue;
2033+
20252034
/// The `hasOwnProperty()` method returns a boolean indicating whether the
20262035
/// object has the specified property as its own property (as opposed to
20272036
/// inheriting it).

crates/js-sys/tests/wasm/Object.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ extern "C" {
1313
type DefinePropertyAttrs;
1414
#[wasm_bindgen(method, setter, structural)]
1515
fn set_value(this: &DefinePropertyAttrs, val: &JsValue);
16+
17+
type PropertyDescriptor;
18+
#[wasm_bindgen(method, getter, structural)]
19+
fn value(this: &PropertyDescriptor) -> JsValue;
1620
}
1721

1822
#[wasm_bindgen(module = "tests/wasm/Object.js")]
@@ -101,6 +105,15 @@ fn define_properties() {
101105
assert!(foo.has_own_property(&"car".into()));
102106
}
103107

108+
#[wasm_bindgen_test]
109+
fn get_own_property_descriptor() {
110+
let foo = foo_42();
111+
let desc = Object::get_own_property_descriptor(&foo, &"foo".into());
112+
assert_eq!(PropertyDescriptor::from(desc).value(), 42);
113+
let desc = Object::get_own_property_descriptor(&foo, &"bar".into());
114+
assert!(PropertyDescriptor::from(desc).value().is_undefined());
115+
}
116+
104117
#[wasm_bindgen_test]
105118
fn has_own_property() {
106119
assert!(foo_42().has_own_property(&"foo".into()));

0 commit comments

Comments
 (0)