如何设置 Object.prototype.somefunction 为 `readonly`?
How to set Object.prototype.somefunction is `readonly`?
var obj = {};
console.log(obj.constructor === Object); // true
console.log(typeof obj.constructor); // function
obj['foo'] = 'bar';
obj['constructor'] = 'String';
console.log(obj.constructor === Object); // false
console.log(typeof obj.constructor); // string
我想在此示例中提及一个案例:在 obj
对象中,我添加了一个新的 属性 名称 constructor
,值为 String
。值的类型是 string
.
所以:'string' !== 'function'
.
因为我将它重写为第二个,所以我不能像第一个函数那样使用它。
这也意味着:一些 js 开发人员(几乎)不想在对象中声明名称为 constructor
的 属性。如果我尝试这样做,默认的 constructor
将被覆盖。
另一种情况相同:
var array = [];
console.log(typeof array.forEach); // function
array['forEach'] = 'String';
console.log(typeof array.forEach); // string
为什么js不接受多个同名不同值类型的key?
我想达到的目标:
var action = {
isDone: false,
isDone: function (flag) {
this.isDone = flag
}
};
action.isDone(progressing is done);
if (action.isDone) {
// done...
}
// 'boolean' !== 'function'
我的问题:
1/. 如何定义新的 属性 到具有相同键的对象? (不与其他主题重复,因为 same key but differnce value types
);
2/. 这是防止覆盖对象的最佳方法吗属性? (或readonly
如题)
var obj = {};
Object.defineProperty(obj, 'constructor', {
get: function () {
return function () {
// default constructor here...
}
},
set: function (newValue) {
// do nothing here...
}
})
How to define new property to an object with same key? (not duplicate with another topics because same key but differnce value types);
你不能
Is it the best way to prevent to override an object property?
当然,但您仍然可能使用错误。你围绕它编写的任何代码都可能是错误的 JavaScript.
无论您来自哪种语言,我建议不要尝试在 JavaScript 中实现其他习语。 JavaScript是它自己的东西。学习如何写地道的 JavaScript.
var obj = {
};
// being explicit
Object.defineProperty(obj, 'testFunction', {
writable: false,
value: function(){
console.log("Print read only Function");
return;
}
});
console.log(obj.testFunction.toString());
obj.testFunction();
obj.testFunction= function(){
console.log("Override Function");
}
console.log(obj.testFunction.toString());
obj.testFunction();
var obj = {};
console.log(obj.constructor === Object); // true
console.log(typeof obj.constructor); // function
obj['foo'] = 'bar';
obj['constructor'] = 'String';
console.log(obj.constructor === Object); // false
console.log(typeof obj.constructor); // string
我想在此示例中提及一个案例:在 obj
对象中,我添加了一个新的 属性 名称 constructor
,值为 String
。值的类型是 string
.
所以:'string' !== 'function'
.
因为我将它重写为第二个,所以我不能像第一个函数那样使用它。
这也意味着:一些 js 开发人员(几乎)不想在对象中声明名称为 constructor
的 属性。如果我尝试这样做,默认的 constructor
将被覆盖。
另一种情况相同:
var array = [];
console.log(typeof array.forEach); // function
array['forEach'] = 'String';
console.log(typeof array.forEach); // string
为什么js不接受多个同名不同值类型的key?
我想达到的目标:
var action = {
isDone: false,
isDone: function (flag) {
this.isDone = flag
}
};
action.isDone(progressing is done);
if (action.isDone) {
// done...
}
// 'boolean' !== 'function'
我的问题:
1/. 如何定义新的 属性 到具有相同键的对象? (不与其他主题重复,因为 same key but differnce value types
);
2/. 这是防止覆盖对象的最佳方法吗属性? (或readonly
如题)
var obj = {};
Object.defineProperty(obj, 'constructor', {
get: function () {
return function () {
// default constructor here...
}
},
set: function (newValue) {
// do nothing here...
}
})
How to define new property to an object with same key? (not duplicate with another topics because same key but differnce value types);
你不能
Is it the best way to prevent to override an object property?
当然,但您仍然可能使用错误。你围绕它编写的任何代码都可能是错误的 JavaScript.
无论您来自哪种语言,我建议不要尝试在 JavaScript 中实现其他习语。 JavaScript是它自己的东西。学习如何写地道的 JavaScript.
var obj = {
};
// being explicit
Object.defineProperty(obj, 'testFunction', {
writable: false,
value: function(){
console.log("Print read only Function");
return;
}
});
console.log(obj.testFunction.toString());
obj.testFunction();
obj.testFunction= function(){
console.log("Override Function");
}
console.log(obj.testFunction.toString());
obj.testFunction();