JS_DeleteProperty2 编辑

Obsolete since JSAPI 39
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

 

Removes a specified property from an object.

Renamed to JS_DeleteProperty from JSAPI 39.

Syntax

bool
JS_DeleteProperty2(JSContext *cx, JS::HandleObject obj, const char *name,
                   bool *succeeded);

bool
JS_DeleteUCProperty2(JSContext *cx, JS::HandleObject obj, const char16_t *name, size_t namelen,
                     bool *succeeded);

bool
JS_DeletePropertyById2(JSContext *cx, JS::HandleObject obj, JS::HandleId id,
                       bool *succeeded); // Added in SpiderMonkey 1.8.1
NameTypeDescription
cxJSContext *Pointer to a JS context from which to derive runtime information. Requires request. In a JS_THREADSAFE build, the caller must be in a request on this JSContext.
objJS::HandleObjectObject from which to delete a property.
name or idconst char * or const char16_t or JS::HandleIdName of the property to delete.
namelensize_t(only in JS_DeleteUCProperty2) The length of name in characters; or -1 to indicate that name is null-terminated.
succeededbool *Out parameter. On success, *succeeded receives false if the property was not deleted because it is permanent and true otherwise.

Description

JS_DeleteProperty2 removes a specified property, name, from an object, obj, and stores true or false in *succeeded. It behaves like the JavaScript expression delete obj[name]. JS_DeleteUCProperty2 is the Unicode version of the function. JS_DeletePropertyById2 is the same but takes a JS::HandleId for the property name.

First, a property lookup is performed. Then one of the following cases applies:

  • If obj has no property with the given name or id, or if obj inherits the specified property from its prototype, then *succeeded is set to true and obj's JSClass.delProperty hook is called (which may change *succeeded). No property is deleted, but this is not an error.
  • If obj has the specified property but it is permanent, then *succeeded receives false. No property is deleted, but this is not an error.
  • Otherwise obj has a non-permanent own property with the given name or id. In this case, *succeeded is set to true and obj's JSClass.delProperty hook is called (which may change *succeeded). If the hook returns false, the error is propagated. Otherwise, if obj is not configurable, an error is raised. Otherwise, *succeeded receives true and the property is removed.

These functions return true on success, regardless of whether a property was actually deleted. On error or exception, the return value is false, and the value left in *succeeded is unspecified.

JSObjectOps.deleteProperty implements this behavior.

(In JavaScript 1.2 and earlier, attempting to delete a permanent property caused an error. There is no longer any way to get this behavior.)

To remove all properties from an object, call JS_ClearScope.

See Also

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:61 次

字数:7211

最后编辑:7年前

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文