Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

javascript 中原型和constructor的返回值的一些tips #35

Open
geminiwen opened this issue Aug 5, 2013 · 0 comments
Open

javascript 中原型和constructor的返回值的一些tips #35

geminiwen opened this issue Aug 5, 2013 · 0 comments
Labels

Comments

@geminiwen
Copy link
Owner

原型的一些小知识

在原型编程中,或者说面向对象编程中,我们总会写出以下代码

 var obj = new MyObject(); 

我们一般写这个构造函数的时候,都是这么写的

var MyObject = function() {
            // something you want to do
};

如果要对这个类进行扩展的话,就会去扩展它的原型对象 prototype
类似代码如下

MyObject.prototype = {
     'foo':'bar'
}

根据《javascript权威指南》我们可以知道,判断一个对象是不是一个“类”的实例,
一般采用 instanceof 关键字。在我们传统的面向对象编程中,MyObject 绝对是obj的类。在js中与之对应的是constructor,但是在js中,和传统OO有很大区别的是,MyObject不一定是obj的“类”,它只是obj的构造函数而已,在原型模式中,构造函数不同不意味着对象所属的类不同,但是 如果两个object所拥有的prototype对象不同的话,那么他们就不属于一个类
用代码来说 就是说
如果
a.prototype !== b.prototype
那么他们的类就是不相同的,这个条件起决定的作用,跟他们的constructor是否相同无关。
这是一个非常有趣的现象。

关于Constructor的返回值

今天看jQuery Source的时候会看见很多Constructor都有一个返回值,当然在此之前,我从来不会在Constructor中添加返回值,因为它默认返回this。后来查阅相关资料。Constructor如果具有返回值的话,要判断下返回值的类型,如果返回值的类型是一个object,那么产生的对象的prototype和object相同,如果不是个object的话,就返回this。
show code:

var MyObject = function(o) {
     if( o == 2 ) {
        return { }
     } else if ( o == 1 ) {
       return 1 
     } 
}

可以在Chrome的Console中看下他们的类型,会很有趣哦~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant