javascript-MDN笔记-对象
来源:互联网 发布:js鼠标划过的位置 编辑:程序博客网 时间:2024/05/20 22:29
例子:创造一个对象
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笔记-对象
- javascript-MDN学习笔记
- javascript-MDN笔记-函数
- javascript-MDN学习笔记-Array部分
- javascript-MDN笔记-产生固定范围随机数
- 【笔记】【MDN】JavaScript指南 > 语法和数据类型
- javascript MDN网址
- MDN Web 技术文档 - JavaScript Strict mode
- MDN 文档对象模型 (DOM) - DOM概述
- 对于javascript MDN 中let 和var范例的认识
- Javascript学习笔记-----对象
- javascript对象学习笔记
- JavaScript学习笔记:对象
- javascript面向对象笔记
- JavaScript笔记:对象
- 【javascript笔记】Promise对象
- JavaScript笔记(对象)
- Javascript学习笔记(对象)
- java swing borderLayout
- veil-evasion 在xp下的三分之二免杀
- C++ 中各种类型的表示范围
- bypass UAC 提权
- hibernate 标准 ORM框架
- javascript-MDN笔记-对象
- 用C语言实现打印菱形
- 筋斗云接口编程 / 创建Web接口项目
- css属性选择器
- Windows下快速搭建安卓开发环境android-studio
- 编程:判断一个给定字符串中字符全都不同java
- 较全的Spring配置文件约束
- [BZOJ2199][Usaco2011 Jan]奶牛议会(2-SAT)
- python递归打印路径