Skip to content

Commit 4a1618c

Browse files
authored
Merge pull request #3 from ambit-tsai/dev
fix bugs when checking descriptor
2 parents 668e8ba + d668f40 commit 4a1618c

File tree

4 files changed

+23
-14
lines changed

4 files changed

+23
-14
lines changed

dist/object-defineproperty-ie.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "object-defineproperty-ie",
3-
"version": "1.1.0",
3+
"version": "1.1.1",
44
"description": "A Object.defineProperty sham based on VBScript for IE",
55
"main": "src/object-defineproperty-ie.js",
66
"scripts": {

src/object-defineproperty-ie.js

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* Object.defineProperty Sham For IE
3-
* @version 1.1.0
3+
* @version 1.1.1
44
* @author Ambit Tsai <ambit_tsai@qq.com>
55
* @license Apache-2.0
66
* @see {@link https://github.com/ambit-tsai/object-defineproperty-ie}
@@ -81,12 +81,13 @@
8181
for (var prop in props) {
8282
if (has(props, prop)) {
8383
var desc = props[prop];
84+
checkDescriptor(desc);
8485
if (has(descMap, prop)) {
8586
assign(descMap[prop], desc);
8687
} else {
8788
descMap[prop] = desc;
8889
}
89-
checkDescriptor(descMap[prop]);
90+
setDefaultDescriptor(descMap[prop]);
9091
}
9192
}
9293

@@ -95,7 +96,7 @@
9596
window.execScript(script, 'VBS');
9697
obj = window['VB_factory_' + uid](); // call factory function
9798
setInitialValue(obj, descMap);
98-
window.VB_cache[uid] = {
99+
window.VB_cache[uid] = { // cache
99100
obj: obj,
100101
desc: descMap
101102
};
@@ -125,18 +126,26 @@
125126
if (('value' in desc || 'writable' in desc) && ('get' in desc || 'set' in desc)) {
126127
throw new TypeError('Invalid property descriptor');
127128
}
129+
if ('get' in desc && typeof desc.get !== 'function' && desc.get !== undefined) {
130+
throw new TypeError('Getter must be a function');
131+
}
132+
if ('set' in desc && typeof desc.set !== 'function' && desc.set !== undefined) {
133+
throw new TypeError('Setter must be a function');
134+
}
135+
}
136+
137+
138+
/**
139+
* Set default descriptor
140+
* @param {Object} desc
141+
*/
142+
function setDefaultDescriptor(desc) {
128143
if ('value' in desc || 'writable' in desc) {
129144
if (!('value' in desc)) {
130145
desc.value = undefined;
131146
}
132147
desc.writable = !!desc.writable;
133148
} else if ('get' in desc || 'set' in desc) {
134-
if (typeof desc.get !== 'function' && desc.get !== undefined) {
135-
throw new TypeError('Getter must be a function');
136-
}
137-
if (typeof desc.set !== 'function' && desc.set !== undefined) {
138-
throw new TypeError('Setter must be a function');
139-
}
140149
desc.get = desc.get || undefined;
141150
desc.set = desc.set || undefined;
142151
} else {
@@ -152,6 +161,7 @@
152161
* Merge object properties
153162
* @param {Object} target
154163
* @param {Object} source
164+
* @returns {Object}
155165
*/
156166
function assign(target, source) {
157167
for (var prop in source) {

test/index.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@
3535
writable: true
3636
},
3737
boolean: {
38-
value: false,
39-
writable: true
38+
value: false
4039
},
4140
'undefined': {
4241
value: undefined,

0 commit comments

Comments
 (0)