构造函数中定义的属性是拥有还是继承?

时间:2016-10-12 09:33:30

标签: javascript

我是Javascript的新手,如果这听起来像一个简单的问题。 如果我有以下构造函数:

function Person(x,y){
 this.name = x;
 this.surname = y;

}

我很好奇属性namesurname是否被视为拥有}或继承的对象的拥有属性?< / p>

e.g。

Person

我使用var x = new Person("John", "Doe"); 进行了一些测试,这些测试表明它们被认为是自己的属性而不是继承,只是想验证。

2 个答案:

答案 0 :(得分:1)

是的,它们是拥有的属性。使用new Person实例化对象时,将创建一个对象,将调用您的函数Personthis内的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