1、继承第一种方式:对象冒充
function Parent(username){
this.username = username
this.hello = function(){
alert(this.username)
}
}
function Child(username,password){
//通过以下3行实现将Parent的属性和方法追加到Child中,从而实现继承
//第一步:this.method是作为一个临时的属性,并且指向Parent所指向的对象,
//第二步:执行this.method方法,即执行Parent所指向的对象函数
//第三步:销毁this.method属性,即此时Child就已经拥有了Parent的所有属性和方法
this.method = Parent
this.method(username)//最关键的一行
delete this.method
this.password = password
this.world = function(){
alert(this.password)
}
}
var parent = new Parent("zhangsan")
var child = new Child("lisi","123456")
parent.hello()
child.hello()
child.world()
2、继承第二种方式:call()方法方式
call方法是Function类中的方法
call方法的第一个参数的值赋值给类(即方法)中出现的this
call方法的第二个参数开始依次赋值给类(即方法)所接受的参数
function test(str){
alert(this.name + " " + str)
}
var object = new Object()
object.name = "zhangsan"
test.call(object,"langsin")//此时,第一个参数值object传递给了test类(即方法)中出现的this,而第二个参数"langsin"则赋值给了test类(即方法)的str
function Parent(username){
this.username = username
this.hello = function(){
alert(this.username)
}
}
function Child(username,password){
Parent.call(this,username)
this.password = password
this.world = function(){
alert(this.password)
}
}
var parent = new Parent("zhangsan")
var child = new Child("lisi","123456")
parent.hello()
child.hello()
child.world()
3、继承的第三种方式:apply()方法方式
apply方法接受2个参数,
A、第一个参数与call方法的第一个参数一样,即赋值给类(即方法)中出现的this
B、第二个参数为数组类型,这个数组中的每个元素依次赋值给类(即方法)所接受的参数
function Parent(username){
this.username = username
this.hello = function(){
alert(this.username)
}
}
function Child(username,password){
Parent.apply(this,new Array(username))
this.password = password
this.world = function(){
alert(this.password)
}
}
var parent = new Parent("zhangsan")
var child = new Child("lisi","123456")
parent.hello()
child.hello()
child.world()
4、继承的第四种方式:原型链方式,即子类通过prototype将所有在父类中通过prototype追加的属性和方法都追加到Child,从而实现了继承
function Person(){
}
Person.prototype.hello = "hello"
Person.prototype.sayHello = function(){
alert(this.hello)
}
function Child(){
}
Child.prototype = new Person()//这行的作用是:将Parent中将所有通过prototype追加的属性和方法都追加到Child,从而实现了继承
Child.prototype.world = "world"
Child.prototype.sayWorld = function(){
alert(this.world)
}
var c = new Child()
c.sayHello()
c.sayWorld()
5、继承的第五种方式:混合方式
混合了call方式、原型链方式
function Parent(hello){
this.hello = hello
}
Parent.prototype.sayHello = function(){
alert(this.hello)
}
function Child(hello,world){
Parent.call(this,hello)//将父类的属性继承过来
this.world = world//新增一些属性
}
Child.prototype = new Parent()//将父类的方法继承过来
Child.prototype.sayWorld = function(){//新增一些方法
alert(this.world)
}
var c = new Child("zhangsan","lisi")
c.sayHello()
c.sayWorld()
问题应该是继承方式吧// 定义一个动物类
function Animal (name) {
// 属性
this.name = name || 'Animal'
// 实例方法
this.sleep = function(){
console.log(this.name + '正在睡觉!')
}
}
// 原型方法
Animal.prototype.eat = function(food) {
console.log(this.name + '正在吃:' + food)
}
原型继承
function Cat(){
}
Cat.prototype = new Animal()
Cat.prototype.name = 'cat'
// Test Code
var cat = new Cat()
console.log(cat.name)
console.log(cat.eat('fish'))
console.log(cat.sleep())
console.log(cat instanceof Animal)//true
console.log(cat instanceof Cat)//true
var a = {defaultParam : {
'参数1' : '初始值',
'参数2' : 0,
'参数3' : true
},
b : function(param){
if(!param) param = {}
if(typeof param['参数1'] === 'undefined'){
param['参数1'] = a.defaultParam['参数1']
}
if(typeof param['参数2'] === 'undefined'){
param['参数2'] = a.defaultParam['参数2']
}
if(typeof param['参数3'] === 'undefined'){
param['参数3'] = a.defaultParam['参数3']
}
alert(param['参数1'])
alert(param['参数2'])
alert(param['参数3'])
}
}
a.b({
'参数1' : 's1',
'参数2' : 5
})
在代码中使用汉字做变量或者属性值,最好使用引号 ( param['参数1'] ),
不要直接使用点 (param.属性1)