本文主要是介绍javascript-MDN笔记-对象,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
例子:创造一个对象
function Person(first, last, age, gender, interests) {this.name = {first,last};this.age = age;this.gender = gender;this.interests = interests;this.bio = function() {alert(this.name.first + ' ' + this.name.last + ' is ' + this.age + ' years old. He likes ' + this.interests[0] + ' and ' + this.interests[1] + '.');};this.greeting = function() {alert('Hi! I\'m ' + this.name.first + '.');};
};
创建Object的四种方法:
1、直接建立:
var person = {name: ['Bob', 'Smith'],age: 32,gender: 'male',interests: ['music', 'skiing'],bio: function() {alert(this.name[0] + ' ' + this.name[1] + ' is ' + this.age + ' years old. He likes ' + this.interests[0] + ' and ' + this.interests[1] + '.');},greeting: function() {alert('Hi! I\'m ' + this.name[0] + '.');}
};
2、通过构造器函数:(最上面的例子)
3、通过Object()的构造器:
var person1 = new Object();
或
var person1 = new Object({name : 'Chris',age : 38,greeting : function() {alert('Hi! I\'m ' + this.name + '.');}
});
4、使用create()方法:(基于一个已经存在的对象创建另一个对象。)
var person2 =
Object.create(person1);
注意:此时person2就是拷贝了一个person1,它里面的属性和方法都一样。
在传统的 OOP 中,首先定义“类”,此后创建对象实例时,类中定义的所有属性和方法都被复制到实例中。在 JavaScript 中并不如此复制——而是在对象实例和它的构造器之间建立一个连接(作为原型链中的一节),以后通过上溯原型链,在构造器中找到这些属性和方法。
当我们调用person1中的valueOf()方法时,发生什么呢:
person1.valueOf()
- 浏览器首先检查,
person1
对象是否具有可用的valueOf()
方法。 - 如果没有,则浏览器检查
person1
对象的原型对象(即Person
)是否具有可用的valueof()
方法。 - 如果也没有,则浏览器检查
Person()
构造器的原型对象(即Object
)是否具有可用的valueOf()
方法。Object
具有这个方法,于是该方法被调用,
----------------------------------------------------------------------------------------------------------------------------------------
1、prototype 属性:在此处定义被继承的成员:
prototype
属性之上的——那些以 Object.prototype.
开头的属性, Object.
开头的属性。prototype
属性的值是一个对象,我们希望被原型链下游 Person.prototype.farewell = function() {alert(this.name.first + ' has left the building. Bye for now!');
}
Person.prototype.fullName = this.name.first + ' ' + this.name.last;
var Person=function(name,age){this.name=name;this.age=age; } var person1=new Person("tomb",25); var person2=Object.create(person1); console.log(person1.__proto__);------结果是Person对象 console.log(person2.__proto__);------结果是person1对象。
----------------------------------------------------------------------------------------------------------------------------------------
var Person=function(name,age){this.name=name;this.age=age; } var person1=new Person("tomb",25); var person2=Object.create(person1); console.log(person1.constructor);------结果是Person()构造器 console.log(person2.constructor);------结果任然是Person()构造器
var person3 = new person1.constructor('Karen', 'Stephenson', 26, 'female', ['playing drums', 'mountain climbing']);
----------------------------------------------------------------------------------------------------------------------------------------
// 构造器及其属性定义function Test(a,b,c,d) {// 属性定义
};// 定义第一个方法Test.prototype.x = function () { ... }// 定义第二个方法Test.prototype.y = function () { ... }// 等等……
----------------------------------------------------------------------------------------------------------------------------------------
function Teacher(first, last, age, gender, interests, subject) {Person.call(this, first, last, age, gender, interests);this.subject = subject;
}
Teacher.prototype = Object.create(Person.prototype);
第三步:设置constructor属性:(不设置,有可能会出错) Teacher.prototype.constructor = Teacher;
这篇关于javascript-MDN笔记-对象的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!