我是Javascript的新手,如果这听起来像一个简单的问题。 如果我有以下构造函数:
function Person(x,y){
this.name = x;
this.surname = y;
}
我很好奇属性 e.g。 我使用name
和surname
是否被视为拥有1>}或继承的对象的拥有属性?< / p>
Person
var x = new Person("John", "Doe");
进行了一些测试,这些测试表明它们被认为是自己的属性而不是继承,只是想验证。
答案 0 :(得分:1)
是的,它们是拥有的属性。使用new Person
实例化对象时,将创建一个对象,将调用您的函数Person
,this
内的Person
引用此新对象。然后,您可以直接在此对象上直接设置属性。从本质上讲,与此无异:
function person(obj) {
obj.name = 'Foo';
obj.surname = 'Bar';
}
var o = {};
person(o);
o.name // Foo
答案 1 :(得分:1)
最简单的检查方法是尝试查看。
但是,是的,它们被认为是自己的属性。在构造函数内部,this
是对新构造的对象的引用(当使用Person
调用new
时)。
这与做
基本相同
var x = {};
x.name = 'foo'
console.log(x.hasOwnProperty('name')); // true
将其与原型属性进行比较:
function Person(name) {
this.name = name;
}
Person.prototype.brain = 'meat-like';
var p = new Person('Bob');
console.log(p.name); // Bob
console.log(p.brain); // meat-like
console.log(p.hasOwnProperty('name')); // true
console.log(p.hasOwnProperty('brain')); // false