- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的 JavaScript 代码:
console.clear();
function BaseClass(nname) {
var name = nname;
this.bc_PublicProperty = "DefaultValue_BaseClass";
this.bc_getName = function GetName() {
return name;
};
this.bc_setName = function SetName(nname) {
name = nname;
};
}
function SubClass(nname) {
BaseClass.call(this, nname);
this.sc_PublicProperty = "DefaultValue_SubClass";
this.sc_getName = function GetName() {
return name;
};
this.sc_setName = function SetName(nname) {
name = nname;
};
}
SubClass.prototype = Object.create(BaseClass.prototype);
SubClass.prototype.constructor = SubClass;
var bc = new BaseClass("Anton");
var sc = new SubClass("Bernd");
console.log("hasOwnProperty check on subclass object 'sc' returns true for Method 'bc_getName'");
for (var pro in sc) {
console.log("Is " + pro + " own property of subclass: --> " + Object.hasOwnProperty.call(sc, pro));
}
console.clear();
var l = function(v) {
console.log(v);
};
function BaseClass(nname) {
this.bc_nameProp = nname;
this.bc_ownFunc = function() {
l("bc_ownFunc of BaseClass called");
};
this.bc_getName = function GetName() {
return this.bc_nameProp;
};
}
BaseClass.prototype.bc_getName = function GetName() {
return this.bc_nameProp;
};
BaseClass.prototype.bc_PublicProperty = "DefaultValue_BaseClass";
BaseClass.prototype.bc_setName = function SetName(nname) {
bc_nameProp = nname;
};
function SubClass(nname) {
BaseClass.call(this, nname);
this.sc_setName = function SetName(nname) {
bc_nameProp = nname;
};
this.bc_getName = function GetName() {
return "xyz";
};
}
SubClass.prototype = Object.create(BaseClass.prototype);
SubClass.prototype.constructor = SubClass;
SubClass.prototype.sc_getName = function GetName() {
return this.bc_nameProp;
};
SubClass.prototype.sc_PublicProperty = "DefaultValue_SubClass";
var bc = new BaseClass("Anton");
var sc = new SubClass("Bernd");
l("----- iterating over BaseClass properties ------");
l("");
for (var pro in bc) {
l("Is " + pro + " own property of BaseClass: --> " + Object.hasOwnProperty.call(bc, pro));
}
l("");
l("----- iterating over SubClass properties ------");
l("");
for (var p in sc) {
l("Is " + p + " own property of subclass: --> " + Object.hasOwnProperty.call(sc, p));
}
l(bc.bc_getName());
l(sc.bc_getName());
l(sc.sc_getName());
SubClass.prototype = Object.create(BaseClass.prototype);
使用 hasOwnProperty 时,附加到原型(prototype)的所有属性/函数都返回“false”。
BaseClass.call(this, nname);
因此,在迭代 SubClass 类型的 obj 的所有属性时使用 hasOwnProperty,将为原型(prototype)级别声明的所有属性/函数输出 false,为构造函数级别声明的所有属性/函数输出 true。
最佳答案
检查您是否调用 BaseClass.call(this)
在 SubClass
的构造函数,这意味着您要添加 BaseClass
SubClass
的属性和函数例如,因为 this
是 SubClass
的一个实例.
这就是为什么hasOwnProperty
返回 true
对于所有属性。
错误的原型(prototype)...
归根结底,您并没有利用 JavaScript 中的原型(prototype)。
必须是某个原型(prototype)的任何实例的一部分的函数应该在原型(prototype)本身中定义。
var A = function() {};
A.prototype = {
doStuff: function() {}
};
实际上,在构造时定义函数的唯一好处是您可以确保对象始终定义一些函数/属性,但是一旦对象已经创建,您就可以确保这一点。
var A = function() {};
var instance = new A();
instance.text = "Hello, World!";
// or...
var A = function() {
this.text = "Hello, World!";
};
var instance = new A();
第一个代码示例定义了
text
调用构造函数之后的属性,而第二个在构造函数内部执行它,但在这两种情况下都是
this
或
instance
是对同一对象的引用(即
A
的实例)。
[...] I have to adjust my question a bit now: When do I needhasOwnProperty, if actually public props/functions should be declaredon the prototype, which in turn will all outputObject.hasOwnProperty(obj,"prop/func") --> false. Give me a use case,when it makes sense, to use hasOwnProperty.
hasOwnProperty
?问问自己,什么时候需要可重用性较低的简单对象,或者什么时候需要实际可重用性。
hasOwnProperty
与这个问题无关。
{}
语法声明的对象)?当你需要字典、参数映射、值对象时...这里你喜欢
hasOwnProperty
因为通常您的代码接收参数将如下所示:
function X(uri, options) {
if(typeof options != "undefined") {
// For example, we set a default value if options has no
// mimeType property...
options.mimeType = options.hasOwnProperty("mimeType") ? options.mimeType : "application/json";
}
}
你什么时候使用原型(prototype)来使用复杂的对象?当您定义行为并且您需要在您的应用程序甚至多个应用程序中重用它时,您还需要在通用需求之上添加更多行为(hello 继承)。
hasOwnProperty
...
But why would you use "hasOwnProperty" here, if you want to check theexistence of an property? Shouldn't it be: options.mimeType =options.mimeType || "application/json";
options.mimeType || "application/json"
, right, because in JavaScript
undefinedevaluates to
false(if
optionsdoesn't own a
mimeTypeproperty returns
undefined`).
hasOwnProperty
因为它返回
boolean
如果它存在或者它存在并且它具有未定义的值。
{ mimeType: undefined }
有时您想知道该属性是否存在,即使它有
undefined
作为值(value)。
undefined
如
false
处理是否未定义的情况,无论是否存在,执行 X 和
hasOwnProperty
我想确定它是否具有该属性。
options.hasOwnProperty
超过其他方法? .简单:因为,既然语言提供了一个工具来验证某个属性是否存在于某个对象中,我为什么需要一个技巧?
object.hasOwnProperty
返回
true
或
false
,并且我确定该属性是否存在,即使该属性具有
undefined
值(value)。
options.hasOwnProperty("mimeType")
我可以抛出
Error
如果它存在并且它有
undefined
值(value)。为什么我更喜欢这个?因为我喜欢
fail-fast 概念:如果你给了我
undefined
的属性(property)值(value)我倾向于认为您的代码中有一些错误。定义与否,我的 friend !
关于javascript - hasOwnProperty 在检查父对象属性时返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29054218/
我的一位教授给了我们一些考试练习题,其中一个问题类似于下面(伪代码): a.setColor(blue); b.setColor(red); a = b; b.setColor(purple); b
我似乎经常使用这个测试 if( object && object !== "null" && object !== "undefined" ){ doSomething(); } 在对象上,我
C# Object/object 是值类型还是引用类型? 我检查过它们可以保留引用,但是这个引用不能用于更改对象。 using System; class MyClass { public s
我在通过 AJAX 发送 json 时遇到问题。 var data = [{"name": "Will", "surname": "Smith", "age": "40"},{"name": "Wil
当我尝试访问我的 View 中的对象 {{result}} 时(我从 Express js 服务器发送该对象),它只显示 [object][object]有谁知道如何获取 JSON 格式的值吗? 这是
我有不同类型的数据(可能是字符串、整数......)。这是一个简单的例子: public static void main(String[] args) { before("one"); }
嗨,我是 json 和 javascript 的新手。 我在这个网站找到了使用json数据作为表格的方法。 我很好奇为什么当我尝试使用 json 数据作为表时,我得到 [Object,Object]
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我听别人说 null == object 比 object == null check 例如: void m1(Object obj ) { if(null == obj) // Is thi
Match 对象 提供了对正则表达式匹配的只读属性的访问。 说明 Match 对象只能通过 RegExp 对象的 Execute 方法来创建,该方法实际上返回了 Match 对象的集合。所有的
Class 对象 使用 Class 语句创建的对象。提供了对类的各种事件的访问。 说明 不允许显式地将一个变量声明为 Class 类型。在 VBScript 的上下文中,“类对象”一词指的是用
Folder 对象 提供对文件夹所有属性的访问。 说明 以下代码举例说明如何获得 Folder 对象并查看它的属性: Function ShowDateCreated(f
File 对象 提供对文件的所有属性的访问。 说明 以下代码举例说明如何获得一个 File 对象并查看它的属性: Function ShowDateCreated(fil
Drive 对象 提供对磁盘驱动器或网络共享的属性的访问。 说明 以下代码举例说明如何使用 Drive 对象访问驱动器的属性: Function ShowFreeSpac
FileSystemObject 对象 提供对计算机文件系统的访问。 说明 以下代码举例说明如何使用 FileSystemObject 对象返回一个 TextStream 对象,此对象可以被读
我是 javascript OOP 的新手,我认为这是一个相对基本的问题,但我无法通过搜索网络找到任何帮助。我是否遗漏了什么,或者我只是以错误的方式解决了这个问题? 这是我的示例代码: functio
我可以很容易地创造出很多不同的对象。例如像这样: var myObject = { myFunction: function () { return ""; } };
function Person(fname, lname) { this.fname = fname, this.lname = lname, this.getName = function()
任何人都可以向我解释为什么下面的代码给出 (object, Object) 吗? (console.log(dope) 给出了它应该的内容,但在 JSON.stringify 和 JSON.parse
我正在尝试完成散点图 exercise来自免费代码营。然而,我现在只自己学习了 d3 几个小时,在遵循 lynda.com 的教程后,我一直在尝试确定如何在工具提示中显示特定数据。 This code
我是一名优秀的程序员,十分优秀!